PL/SQL-DDL-Execute Immediate
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
Hallo, ich bin neu in PL/SQL und versuchen, ein Skript zum löschen der user-Tabelle und schließlich ändern Sie Ihr Passwort später nach dem fallenlassen Ihren Tischen. Ich habe Schwierigkeiten mit der EXECUTE IMMEDIATE-Befehl. Das script funktioniert, wenn ich entfernen Sie die EXECUTE IMMEDIATE-Linie. Getestet habe ich es durch den Druck die Namen der Tabellen innerhalb der Schleife und ich bekomme die richtige Anzahl der Tabellen und Ihre entsprechenden Namen.
Jede Hilfe ist willkommen, danke.
Bearbeitet Sie den code entsprechend dem Vorschlag aber noch nicht. Immer die gleichen Fehler.
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
- Alles, was im data-dictionary ist in Großbuchstaben. Sie müssen
owner like '%' || upper(p_username) || '%'
. Haben Sie wirklich eine Tabelle pro user? - Ich bin die Eingabe eines Benutzernamen, 14 Tabellen. Erstellt habe ich Sie selber und die Tabellen sind Daten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie wahrscheinlich legen Sie den Eigentümer für die Tabelle in der
DROP
Aussage:Der code sieht gut aus.
Könnten Sie versuchen, mit () wie folgt
Könnten Sie versuchen,