Algunas formas de ejecutar sqlplus desde un Shell Script Marzo 14, 2007
Posted by superpiwi in Java, Oracle, Programacion, Unix.trackback
Aqui un pequeño Tip. Imaginate que tienes una base de datos llamada DESA en tu tnsnames.ora y es de la forma:
DESA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = DESA)
)
)
Para un usuario de base de datos DESA con password DESA.
Desde linea de comandos una forma de ejecutar sentencias sql es mediante SQLPLUS. Tu abririas la session con:
sqlplus desa/desa@DESA (es de la forma user/password@SID)
y ya podrias empezar a escribir las sentencias SQL, cuando quisieras terminar teclearias el comando “exit” y terminarias la sesion con sqlplus. Si quisieramos hacer lo mismo pero desde un shell script podriamos hacer lo siguiente (presentare varias formas, no se si habra mas pero estas pueden serte de utilidad).
La primera es mediante el comando echo:
echo "lista de sentencias SQL....separadas con \n" | sqlplus desa/desa@DESA
Por ejemplo:
#!/bin/sh
echo "SELECT sysdate FROM DUAL;\nSELECT sysdate FECHA FROM DUAL" | sqlplus desa/desa@DESA
(\n es el retorno de carro, es como si pulsaramos la tecla Intro, para ir separando las diferentes sentencias SQL)
Otra opcion es la misma pero en vez de pasarle un listado con las sentencias le indicamos con el operador @ la ruta de un fichero sql con las sentencias (no te olvides de acabar con un commit; y/o exit; si fuera necesario).
echo "@/ruta fichero sql" | sqlplus user/password@bd
Ejemplo:
#!/bin/sh
echo "@/home/jose/sqls/insertar.sql" | sqlplus desa/desa@DESA
Arrancaria una sesion de sqlplus y ejecutaria el contenido del fichero “/home/jose/sqls/insertar.sql”
y la ultima y generalmente mas usada es la siguiente:
sqlplus user/pass@BD << ETIQUETA > redireccion
sentencias SQL...
ETIQUETA
Por ejemplo:
#!/bin/sh
sqlplus desa/desa@DESA << EOF > ./output.log
SELECT sysdate FROM DUAL;
SELECT sysdate FECHA FROM DUAL;
EOF
Ejecutaria todas las sentencias SQL entre ETIQUETA y fin de ETIQUETA. En este ultimo caso, Al ejecutar el script, desde la consola, obtenemos lo siguiente:
SQL*Plus: Release 10.2.0.3.0 - Production on Wed Mar 14 14:05:08 2007
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production
With the Partitioning option
JServer Release 9.2.0.8.0 - Production
SQL>
SYSDATE
---------
14-MAR-07
SQL>
FECHA
---------
14-MAR-07
SQL> Disconnected from Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production
With the Partitioning option
JServer Release 9.2.0.8.0 - Production
jose@soledad:~/Desktop$
Es util para construirnos nuestros shell script y poder modificar el modelo de datos de la base de datos ejecutandolos desde un terminal.
First.
muy útil la info, la verdad.
gracias
se puede ejecutar un bloque anonimo de esta forma?
y que dentro de ese bloque anonimo se capture la salida por dbms_output???
Hola:
como lo puedo meter dentro de una variable. Quiero saca un dato concreto y lo quiero meter en una variable, he probado varias maneras y no he podido.
¿Me podeis decir como se hace?
muchas gracias
Podrias hacer algo parecido a esto:
http://javalangnullpointer.wordpress.com/2007/04/25/shell-script-consulta-de-oracle-almacenando-el-resultado-en-un-array/
Aqui lo que hice es una consulta a oracle y devolverla en un array
de variables.
Adaptando un poco el codigo creo que podrias conseguir lo que buscas.
Hola,
estoy intentando ejecutar un sqlplus dentro de shell de unix (un archivo ksh). El problema es que no sé donde debería posicionar el archivo tnsnames.ora dentro del arbol de directorios. Creo que este es mi problema, porque al ejecutar el archivo me da error cuando intenta hacer” sqlplus ADM_GTD/GTD@DGTD << EOF” y me dice error unexpected in ‘<<’.
Espero que puedas echarme una mano.
Muchas gracias.
gracias por la informacion, necesito de su colaboracion para conectarme desde el signo # al oraSID y ejecutar instrucciones de conectarme a la base de datos, posteriormente ejcutar instrucciones de sql y salir del sistema.
En estos momentos con lo que lei me sirvio para hacer varias shell pero no tengo como conectarme desde simbolo # ejecutar su – oraSID
y luego llamar las instrucciones que tengo que funciona, para encadenar todo