Oracle
在 PL/SQL 中循環或類似的東西
很多時候,有必要對一組對象進行一些重複操作/幾行查詢。假設您有一個要解鎖的帳戶列表
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_line
為execute immediate
.