ACCEPT p_username PROMPT 'Enter Username : '
ACCEPT p_password PROMPT 'Enter New Password for Username : '
VARIABLE g_output VARCHAR2(4000)
DECLARE
CURSOR NAME IS SELECT TABLE_NAME FROM DBA_TABLES
WHERE OWNER LIKE '%&p_username%';
DDL_DROP VARCHAR2(200);
BEGIN
FOR TNAME IN NAME
LOOP
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE' || ' ' || TNAME.TABLE_NAME;
:g_output := :g_output || ' ' || TNAME.TABLE_NAME;
END;
END LOOP;
END;
/
PRINT g_output
こんにちは、私はPL/SQLが初めてで、ユーザーの表を削除して最終的に表を削除した後でパスワードを変更するスクリプトを作成しようとしています。 EXECUTE IMMEDIATEコマンドに問題があります。 EXECUTE IMMEDIATE行を削除すると、スクリプトが機能します。ループの中にテーブル名を表示してテストしたところ、テーブルとそれに対応する名前が適切な数になりました。PL/SQL DDL即時実行
ご協力いただきありがとうございます。
提案を反映するようにコードを編集しましたが、それでも機能しませんでした。同じエラーが発生しました。
ACCEPT p_username PROMPT 'Enter Username : '
ACCEPT p_password PROMPT 'Enter New Password for Username : '
VARIABLE g_output VARCHAR2(4000)
DECLARE
NAME SYS_REFCURSOR;
DDL_WORD VARCHAR2(200);
BEGIN
OPEN NAME FOR SELECT TABLE_NAME FROM DBA_TABLES
WHERE OWNER LIKE '%&p_username%';
LOOP
FETCH NAME INTO DDL_WORD;
EXIT WHEN NAME%NOTFOUND;
EXECUTE IMMEDIATE 'DROP TABLE "' || DDL_WORD || '" CASCADE CONSTRAINTS';
:g_output := :g_output || ' ' || DDL_WORD;
END LOOP;
CLOSE NAME;
END;
/
PRINT g_output
データ・ディクショナリ内のすべてが大文字です。 '% 'のような所有者が必要です。上(p_username)|| '%' '。あなたは本当にユーザーあたり1つのテーブルを持っていますか? – Ben
私は14テーブルを持つユーザー名を入力しています。私は自分で作成し、テーブルにはデータがあります。 1行目 – ReiRei