2016-08-05 15 views
0

Ich habe eine .sql Datei mit dem Namen Alter_table.sql, die den folgenden Code haben.Ausführen von SQL-Datei von einer anderen SQL-Datei

alter table mytable add newcolumn VARCHAR2(1); 

Ich möchte diese Datei nicht bearbeiten und einen Spool-Befehl hinzufügen. Allerdings muss ich Alter_table.sql ausführen, indem ich spool in eine andere Datei (execute_sql.sql) schreibe, die wie folgt aussehen sollte. Ich bin mir nicht sicher über die korrekte Syntax. Kann mir bitte jemand hier helfen?

SET SERVEROUTPUT ON 
SET DEFINE OFF 
SPOOL Alter_Table_STD_SOURCE.log 

EXEC username/[email protected] `Alter_table.sql` 

SPOOL OFF; 
SET DEFINE ON 
SET SERVEROUTPUT OFF 
+0

Wie läuft das? Sind Sie bereits mit der Datenbank verbunden? –

+0

Ich benutze die Eingabeaufforderung, mit der ich zuerst auf diesen Pfad (zB c: \ Scripts) zugreife. Dann gebe ich die Empfehlung sqlplus Benutzername/Passwort @ Datenbank. Dann @ execute_sql.sql –

+0

OK, dann sind Sie bereits verbunden, und Sie brauchen nur den '@ Alter_table.sql' Teil von Garys Antwort (anstelle von' exec'), ohne die explizite 'connect'. –

Antwort

1

(Danke an Alex Poole) :-)

Sie zuerst anschließen müssen, dann führen Sie Ihre SQL-Datei in dem Wrapper-Skript, um die Verwendung von Zeichen '@' oder 'START' Befehle:

... 
-- Connect if not already connected. 
CONNECT username/[email protected] 

@Alter_table.sql 

... 

Ich bin mir nicht sicher, ob es eine gute Idee ist, Login/Passwort in einer Datei zu behalten, aber Sie müssen Sicherheit berücksichtigen.

+1

'@ Alter_table.sql' oder [' start'] (https://docs.oracle.com/cd/E11882_01/server.112/e16604/ch_five.htm#i1210918); nicht 'exec', was eine Abkürzung für einen anonymen PL/SQL-Block ist. –

+0

Natürlich danke. Ich korrigiere mein Beispiel. –

Verwandte Themen