2009-04-28 5 views
6

Ich schreibe:Warum erlaubt ORACLE keine aufeinanderfolgenden Zeilenumbruchzeichen in Befehlen?

  • : TABLE Person CREATE (
  • : Name CHAR (10),
  • :
  • : ssn INTEGER);

und es in eine Datei „a.sql“ speichern (Doppelpunkt stellt den Anfang der Zeile, ist nicht in eigentlichen Code.)

Wenn ich führen Sie es dann durch „@a“ in der SQL-Eingabe * Plus-Eingabeaufforderung, es wird mir sagen, dass die Zeile, die mit "ssn" beginnt, nicht als ein Befehl erkannt wird und ignoriert wird.

Von dem, was ich erhalte, scheint es, dass sqlplus einen Befehl beendet, wenn es mehrere Zeilenumbruchzeichen hintereinander trifft. Ist das eine genaue Aussage? Wenn ja, weiß jemand, ob dies notwendig ist/warum er dies tut?

Antwort

15

Ich weiß nicht, warum, aber eine vollständig leere Zeile einen Befehl in SQL * Plus beendet.

Zitat von the SQL*Plus docs:

einen SQL-Befehl Beenden: Sie können in einem von drei Möglichkeiten, einen SQL-Befehl beenden:

  • mit einem Semikolon (;)
  • mit einem Schrägstrich (/) auf einer Linie von selbst
  • mit einer Leerzeile

Sie können auch, wie Leerzeilen sind mit SET SQLBLANKLINES

SQLBL [ANKLINES] behandelt ändern {ON | OFF}

Steuert, ob SQL * Plus können leere Zeilen in einer SQL-Befehl oder ein Skript. ON interpretiert Leerzeilen und neue Zeilen als Teil eines SQL-Befehls oder -Skripts. OFF, der Standardwert, lässt keine Leerzeilen oder neuen Zeilen in einem SQL-Befehl oder Skript oder Skript zu.

Geben Sie den BLOCKTERMINATOR ein, um die SQL-Befehlseingabe zu stoppen, ohne den SQL-Befehl auszuführen. Geben Sie das SQLTERMINATOR-Zeichen ein, um den SQL-Befehlseintrag zu stoppen und die SQL-Anweisung auszuführen.

5

Standardmäßig beendet SQLPlus eine Anweisung, wenn eine Leerzeile eingegeben wird. Das hat es immer getan. In den Tagen vor den Screeneditoren und Abfragetools schien es mir eine gute Idee zu sein.

können Sie das Standardverhalten ändern, mit

Satz SQLBLANKLINES auf

In diesem Fall können Sie eine Linie geben mit nur einem Punkt eine Erklärung zu beenden (aber nicht ausführen) haben würden.

0

Aber wenn Sie wollen, mehrzeiligen Text in einem varchar2 oder einem clob Feld einfügen, Sie chr (10)

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

insert into t values (
'Hello, 

How are you'); 

funktionieren nicht aus Gründen oben verwenden erläutert.

Verwandte Themen