2009-04-28 13 views
6

scrivo:Perché ORACLE non consente i caratteri consecutivi di nuova riga nei comandi?

  • : CREATE TABLE persona (
  • : nome CHAR (10),
  • :
  • : INTERO SSN);

e salvarlo in un file "a.sql" (due punti rappresenta all'inizio della riga, non è nel codice vero e proprio.)

Se dunque io eseguo digitando "@a" in SQL * Più prompt dei comandi, mi dirà che la riga che inizia con "ssn" non è riconosciuta come un comando e viene ignorata.

Da quanto ho capito, sembra che sqlplus stia terminando un comando se incontra più caratteri di nuova riga di seguito. È una dichiarazione accurata? Se sì, qualcuno sa se questo è necessario/perché sceglie di farlo?

risposta

15

Non so il perché, ma una riga completamente vuota termina un comando in SQL * Plus.

Citazione di the SQL*Plus docs:

Chiusura di un comando SQL: È possibile terminare un comando SQL in uno dei tre modi:

  • con un punto e virgola (;)
  • con una barra (/) su una riga di per sé
  • con una riga vuota

si può anche cambiare il modo righe vuote sono trattati con SQLBLANKLINES SET

SQLBL [ANKLINES] {ON | OFF}

Controlla se SQL * Plus permette righe vuote all'interno di un comando SQL o script. ON interpreta righe vuote e nuove righe come parte di un comando o uno script SQL. OFF, il valore predefinito, non consente righe vuote o nuove righe in un comando o script o script SQL.

Immettere il BLOCKTERMINATOR per interrompere l'immissione del comando SQL senza eseguire il comando SQL. Immettere il carattere SQLTERMINATOR per interrompere la voce del comando SQL ed eseguire l'istruzione SQL.

5

Per impostazione predefinita, SQLPlus termina (ma non esegue) un'istruzione quando viene immessa una riga vuota. Lo ha sempre fatto. Probabilmente sembrava una buona idea nei giorni precedenti agli editor di schermate e agli strumenti di query.

È possibile modificare l'azione predefinita con

SQLBLANKLINES impostati su

Nel qual caso si avrebbe dovuto entrare in una linea con solo un punto di sospendere (ma non eseguito) una dichiarazione.

0

Ma se si vogliono inserire testo multilinea in un varchar2 o in un campo CLOB, è possibile utilizzare chr (10)

insert into t values ('Hello,'||chr(10)||chr(10)||' How are you?'); 

insert into t values (
'Hello, 

How are you'); 

non funziona per ragioni spiegate in precedenza.

Problemi correlati