Wie zum ausführen von sql-Skripten, aus pl-sql-Prozedur
Habe ich ein Vorgehen wie :
CREATE OR REPLACE PROCEDURE test is
BEGIN
DBMS_OUTPUT.PUT_LINE('This is a Test');
END;
Möchte ich einige sql-Skripts im aktuellen Arbeitsverzeichnis gespeichert.
Ich könnte führen Sie Sie aus sqlplus mit " @scriptname.sql " aber wie kann ich es von innerhalb der Prozedur ? Für ex:
CREATE OR REPLACE PROCEDURE test is
BEGIN
DBMS_OUTPUT.PUT_LINE('This is a Test');
@scriptname.sql
END;
Diese scheint nicht zu funktionieren ! Gibt es eine bestimmte, ausführen von sql-Skripten, aus pl/sql-Prozeduren ?
Macht Sinn für mich warum würde Sie umschließen Skript-Referenzen in einer gespeicherten Prozedur (oder anonym, für diese Angelegenheit) -- nevermind das Problem mit script-Lage. Können Sie das ausführen von scripts von einer einzigen master-Skript mit SQLPlus, ohne die Notwendigkeit für die gespeicherte Prozedur.
Ich denke, das ist eine grobe Vereinfachung der OP die tatsächlichen Bedürfnisse der...
Ich denke, das ist eine grobe Vereinfachung der OP die tatsächlichen Bedürfnisse der...
InformationsquelleAutor Aniket | 2011-01-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann man nicht im Allgemeinen, weil die pl/sql ist die Datenbank, auf dem server, und sqlplus ist ein client-Prozess. Der server kann sich nicht darauf verlassen, sogar auf dem gleichen system wie der client und die Dateien, viel weniger wissen, etwas über wie finden Sie die Datei, die der client bezieht. Auch wenn die syntax unterstützt wurden (und es nicht), Ihre sql-Skript auf dem server, in einem Ort, den der server kannte und hatte Zugang zu.
InformationsquelleAutor DCookie
Tatsächlich, Sie kann tun dies in SQL*Plus - Sie müssen nur darauf achten, das @ ist das erste Zeichen in der Zeile, z.B.:
SQL*Plus-liest den ganzen Inhalt von dem Skript und fügen Sie es an diesem Punkt in der Prozedur erstellen Sie dann die Prozedur, wie es gegeben ist. Das bedeutet, dass Sie nicht über SQL*Plus-Befehle in
scriptname.sql
. Auch, es wird keine Referenz zu @scriptname.sql in der eigentlichen Prozedur für die Datenbank erstellt.InformationsquelleAutor Jeffrey Kemp
Könnten Sie führen ein OS-Kommando zum starten von SQLPlus und haben, dass die Scripte auszuführen. Übergeben Sie einen Dateinamen in SQLplus zu starten und es wird es ausführen.
Google Externe Prozeduren und extproc oder dieser Artikel. Oder so etwas wie rufen Sie OS-Befehl mit Java
Und er läuft immer noch auf dem server, nicht der client.
Eigentlich läuft auf dem server oder einem anderen server ist nur eine der Angaben, die codiert werden müssen. Ich bin sicherlich nicht sagen, dass es einfach sein wird, aber wenn es möglich ist die Ausführung von code auf dem server und führen Sie zu führen anderswo. Es wird ein Durcheinander von firewall, RPC (oder ähnliche) Fragen, etc. zu lösen, aber es ist möglich. Es ist nicht etwas, was ich würde sehen viel Verdienst, aber ich weiß nicht, das requester - Szenario.
InformationsquelleAutor Karl
Könnten Sie schreiben, eine Gespeicherte Java-Prozedur, die Datei zu öffnen und wieder seinen Inhalt als String und rufen Sie dann Execute Immediate auf den String.
SEHR VORSICHTIG sein, tun dies aber nicht als eine schädliche sql in diesen Dateien kann so ziemlich, was es will.
InformationsquelleAutor Bryan
Selbst wenn sollte es eine Lösung sein, würde ich nicht empfehlen. Ein PL/SQL-Prozedur ist im Prinzip ein SQL-Skript. Entweder
1. führen Sie Ihre SQL-Skripts, die von außerhalb der Datenbank, z.B. über shell-Skript oder
2. bewegen Sie den SQL-code in Ihrem Verfahren.
InformationsquelleAutor Wolfram