PL/SQL - 使用参数和 if/then 语句执行立即循环
PL/SQL - Execute immediate loop using parameter and if/then statement
在 shell 脚本中,我使用 pl/sql 块通过 $USER 参数删除某些用户。如果另一个参数 ${DROP_AB}
是 Y,则从游标中删除所有用户。如果传递的参数是 N,如何删除除一个特定用户 ${USER}AB
之外的所有用户?请参阅下文并提供建议:
BEGIN
DECLARE
CURSOR c1 IS
SELECT username FROM dba_users WHERE username LIKE '${USER}%';
BEGIN
FOR user_rec IN c1
IF ${DROP_AB}='Y' THEN
LOOP
EXECUTE IMMEDIATE 'DROP USER ' ||user_rec.username|| ' CASCADE';
ELSIF ${DROP_AB}='N' THEN
LOOP
--DROP ALL USERS EXCEPT FOR USER '${USER}AB'
END LOOP;
END;
END;
/
未经测试的代码,但下面的内容应该可以工作,但正如上面评论中所建议的那样,这将在系统模式/用户上出错。
BEGIN
DECLARE
CURSOR c1 IS
SELECT username FROM dba_users WHERE username LIKE '${USER}%';
BEGIN
FOR user_rec IN c1 loop
IF ${DROP_AB}='Y' THEN
EXECUTE IMMEDIATE 'DROP USER ' ||user_rec.username|| ' CASCADE';
ELSE
IF user_rec.username != ${USER}AB THEN
EXECUTE IMMEDIATE 'DROP USER ' ||user_rec.username|| ' CASCADE';
END IF;
END IF;
END LOOP;
END;
END;
/
在 shell 脚本中,我使用 pl/sql 块通过 $USER 参数删除某些用户。如果另一个参数 ${DROP_AB}
是 Y,则从游标中删除所有用户。如果传递的参数是 N,如何删除除一个特定用户 ${USER}AB
之外的所有用户?请参阅下文并提供建议:
BEGIN
DECLARE
CURSOR c1 IS
SELECT username FROM dba_users WHERE username LIKE '${USER}%';
BEGIN
FOR user_rec IN c1
IF ${DROP_AB}='Y' THEN
LOOP
EXECUTE IMMEDIATE 'DROP USER ' ||user_rec.username|| ' CASCADE';
ELSIF ${DROP_AB}='N' THEN
LOOP
--DROP ALL USERS EXCEPT FOR USER '${USER}AB'
END LOOP;
END;
END;
/
未经测试的代码,但下面的内容应该可以工作,但正如上面评论中所建议的那样,这将在系统模式/用户上出错。
BEGIN
DECLARE
CURSOR c1 IS
SELECT username FROM dba_users WHERE username LIKE '${USER}%';
BEGIN
FOR user_rec IN c1 loop
IF ${DROP_AB}='Y' THEN
EXECUTE IMMEDIATE 'DROP USER ' ||user_rec.username|| ' CASCADE';
ELSE
IF user_rec.username != ${USER}AB THEN
EXECUTE IMMEDIATE 'DROP USER ' ||user_rec.username|| ' CASCADE';
END IF;
END IF;
END LOOP;
END;
END;
/