Oracle

在 PL/SQL 中循環或類似的東西

  • November 7, 2013

很多時候,有必要對一組對象進行一些重複操作/幾行查詢。假設您有一個要解鎖的帳戶列表

alter user %username% account unlock

而不是為每個使用者多次鍵入同一行,我相信可以使用一些循環構造,但不知道如何在 PL/SQL 中編寫它。有人可以就此提出建議嗎?

您可以使用動態 SQL 生成此類語句,例如

select 'alter user ' || username || ' account unlock' as cmd
 from dba_users
where account_status = 'LOCKED';

跟進您的最新評論,如果您想手動列舉使用者名,您可以使用 PL/SQL 集合,例如嵌套表,例如

SQL> set serveroutput on
SQL> declare
 2     type users_t is table of dba_users.username%type;
 3     my_users users_t := users_t('USER1', 'USER2', 'USER3');
 4  begin
 5     for i in my_users.first .. my_users.last loop
 6        dbms_output.put_line('alter user ' || my_users(i) || ' account unlock');
 7     end loop;
 8  end;
 9  /
alter user USER1 account unlock
alter user USER2 account unlock
alter user USER3 account unlock

PL/SQL procedure successfully completed.

要實際執行命令而不僅僅是列印它們,請替換dbms_output.put_lineexecute immediate.

引用自:https://dba.stackexchange.com/questions/52933