¿Cómo utilizar "$" en SQL plus?

¿Cómo utilizar "$" en SQL plus?

Me enfrento al siguiente problema.

Cuando intento ejecutar el siguiente comando en sqlplus en mi SLES:

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

me muestra el siguiente error:

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

Supongo que es porque en la consulta está involucrado "$", pero no estoy seguro.

¿Hay alguna manera de ejecutar ese comando en el cliente sqlplus usando Linux como sistema operativo?

Si estoy haciendo algo mal, indíqueme la dirección correcta.


Detalles del entorno.

  • SO = SuSE Linux Enterprise Server 11 SP3
  • Cliente instantáneo de Oracle = Versión 12.1.0.2.0
  • SQLPLUS = SQL*Plus: Versión 12.1.0.2.0

Respuesta1

Al menos un problema es la sintaxis de su shell:

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

Esto se conoce como "documento aquí", yvariables de shell(los nombres con el prefijo $) normalmente se expanden. Para evitar la expansión,citael primer uso de EOF, por ejemplo,

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

Otro problema puede ser el carácter especial del nombre de la tabla. También puede citar eso (diciéndole a Oracle que ignore algunas de las reglas de sintaxis que usa para SQL). La mejora quedaría así:

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

Otras lecturas:

información relacionada