Wie verwende ich „$“ in SQL Plus?

Wie verwende ich „$“ in SQL Plus?

Ich stehe vor folgendem Problem.

Wenn ich versuche, den folgenden Befehl in SQLplus in meinem SLES auszuführen:

sqlplus -S user/[email protected] <<EOF
SELECT INSTANCE_NUMBER, HOST_NAME, STARTUP_TIME, STATUS, DATABASE_STATUS, BLOCKED 
FROM GV$INSTANCE;
EOF

es zeigt mir den folgenden Fehler an:

SQL> SELECT INSTANCE_NUMBER, HOST_NAME, STARTUP_TIME, STATUS, DATABASE_STATUS, BLOCKED FROM GVINSTANCE
                                                                                       *
ERROR at line 1:
ORA-00942: table or view does not exist

Ich nehme an, es liegt daran, dass in der Abfrage ein „$“ vorkommt, aber ich bin nicht sicher.

Gibt es eine Möglichkeit, diesen Befehl im SQLPlus-Client mit Linux als Betriebssystem auszuführen?

Wenn ich etwas falsch mache, weisen Sie mich bitte in die richtige Richtung.


Umgebungsdetails.

  • Betriebssystem = SuSE Linux Enterprise Server 11 SP3
  • Oracle Instant Client = Version 12.1.0.2.0
  • SQLPLUS = SQL*Plus: Version 12.1.0.2.0

Antwort1

Mindestens ein Problem ist Ihre Shell-Syntax:

sqlplus -S user/[email protected] <<EOF
SELECT INSTANCE_NUMBER, HOST_NAME, STARTUP_TIME, STATUS, DATABASE_STATUS, BLOCKED 
FROM GV$INSTANCE;
EOF

Das nennt man "Hier-Dokument" undShell-Variablen(Namen mit dem Präfix $) werden normalerweise erweitert. Um die Erweiterung zu verhindern,Zitatdie erste Verwendung von EOF, zB,

sqlplus -S user/[email protected] <<"EOF"
SELECT INSTANCE_NUMBER, HOST_NAME, STARTUP_TIME, STATUS, DATABASE_STATUS, BLOCKED 
FROM GV$INSTANCE;
EOF

Ein weiteres Problem kann das Sonderzeichen im Tabellennamen sein. Sie können es ebenfalls in Anführungszeichen setzen (und Oracle so anweisen, einige der Syntaxregeln zu ignorieren, die es für SQL verwendet). Die Verbesserung würde folgendermaßen aussehen:

sqlplus -S user/[email protected] <<"EOF"
SELECT INSTANCE_NUMBER, HOST_NAME, STARTUP_TIME, STATUS, DATABASE_STATUS, BLOCKED 
FROM "GV$INSTANCE";
EOF

Weiterführende Literatur:

verwandte Informationen