Domanda

Ho un piccolo script SQL che sto eseguendo con Oracle's SQL*Plus per emulare Crea o sostituire sulle tabelle:

BEGIN
    EXECUTE IMMEDIATE 'DROP TABLE symbols';
EXCEPTION
    WHEN OTHERS THEN
        IF SQLCODE != -942 THEN
    END IF;
END;
/
CREATE TABLE symbols ( 
            blah blah,
            blah blah,
        );
EXIT;

SQL*Plus CommandLine è:

sqlplus aegsys15_owner/pass#234@MARVINUAT03 @createSymbolsTable.sql << EOF
> EOF

Se ometto la barra in avanti (/) dopo la fine, sembra elaborare solo il primo blocco di inizio/fine e ignora la sezione Crea tabella sottostante. Inoltre, non stampano nulla di aiuto - solo connessione/disconnessione:

SQL*Plus: Release 11.2.0.1.0 Production on Tue Sep 13 15:49:34 2011

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

 78  Disconnected from Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

Tuttavia, se ho la barra in avanti mi dà un errore:

    END IF;
    *
ERROR at line 6:
ORA-06550: line 6, column 5:
PLS-00103: Encountered the symbol "END" when expecting one of the following:
( begin case declare exit for goto if loop mod null pragma
raise return select update while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
continue close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge pipe purge

CREATE TABLE symbols (
             *
ERROR at line 1:
ORA-00955: name is already used by an existing object

In primo luogo, qual è il modo migliore per avere sia il blocco di eccezioni iniziali/fine nella parte superiore, sia il blocco della tabella Crea nello stesso file .sql?

E in secondo luogo, qual è un modo per ottenere un output utile da SQL*Plus? Ogni file .sql che eseguiamo può avere più istruzioni di creazione (tabelle, indici, sinonimi ecc.). La nostra produzione ideale sarebbe qualcosa di simile:

TABLE foo: Pass
SYNONYM bar: Fail
INDEX foo_1: Pass

Non sono sicuro se qualcosa del genere sia realizzabile con SQL o PL/SQL - felice di scrivere una sceneggiatura di Bash o Python Wrapper attorno a questo, se voi ragazzi pensate che sia una soluzione migliore.

Saluti, Victor

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top