2016-10-10 1 views
0

Ich möchte dieses Skript in PL/SQL auszuführen, aber es hält Fehler immerScript, das andere Skripte exec

set serveroutput on; 
set echo on; 
declare 
    v_code varchar2(250); 
    v_errm varchar2(250); 
begin 
    @@"1.sql"; 
    @@"2.sql"; 
    @@"II_load_438865311678_Reg.sql"; 
exception 
when others then 
    v_code := sqlcode; 
    v_errm := substr(sqlerrm, 1, 64); 
    DBMS_OUTPUT.PUT_LINE('ERROR! - '||DBMS_UTILITY.FORMAT_ERROR_STACK|| DBMS_UTILITY.FORMAT_ERROR_BACKTRACE); 
    rollback; 
end; 
/

Was mit dieser falsch ist.

Error: ORA-06550: line 5, colunm 3: (...) ORA-06550: line 6, colunm 3: (...) ORA-06550: line 7, colunm 3: PLS-00103: Encountered the symbol "@" when expecting one of the following: (begin case declare end exception exit for goto if loop mod null pragma raise return select update while with... and 06550. 00000 - "line %s, column %s:\n%s" *Cause: Usually a PL/SQL compilation error. *Action:

+1

'@' ist kein SQL (oder PL/SQL) -Befehl. Es ist ein SQL \ * Plus-Befehl und kann nur an der SQL \ * Plus-Eingabeaufforderung verwendet werden. ** Not ** in PL/SQL (weil das auf dem ** Server ** nicht auf dem Client ausgeführt wird) –

+0

Was ist die Lösung, um dies zu korrigieren? –

+0

Entweder erstellte gespeicherte Prozeduren mit den anderen Skripts, die dann von diesem Block ausgeführt werden können, oder implementieren Fehlerbehandlung in jedem der anderen Skripts. Ich würde mich dem zweiten anlehnen, es sei denn, diese Rufstruktur ist eine feste Voraussetzung. –

Antwort

0

Sie verwenden den PL/SQL-Code nur, um den Fehler anzuzeigen. Das ist nicht nötig; SQL * Plus zeigt Ihnen bereits einen SQL-Fehler an. Verwenden Sie whenever sqlerror, um den Rollback auszulösen.

whenever sqlerror continue rollback 
@@"1.sql" 
@@"2.sql" 
@@"II_load_438865311678_Reg.sql" 
Verwandte Themen