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
Creo que puedes poner:
variable=`SQLPLUS……EOF`
Podrias hacer algo parecido a esto:
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
./oracle.sh: 3: Syntax error: «|» unexpected
he intentando la primera forma pero me da ese error de sintasis
hola,
me meti en esta sesion a sacar información para crear una shell con sql, me sirvio muchisimo, gracias.
Me has salvado, muchas gracias
Hola muchas gracias, quisiera automatizar el script por medio de crontab pero al momento de hacerlo no me permite, me podrían colaborar. Muchas gracias.
El cron se ejecuta, lo puedo ver en los logs que emite, pero la sentencia no se cumple.
Como puedo ejecutar sqlplus / as sysdba con sólo apretar la letra q y luego la tecla ENTER??? HELP MEEEEE PLEASEEEEEEE!!!!!
Estoy haciendo un sell en unix para que ejecute un query, dentro del shell hay un query con este tipo de vistas v$latch, v$latchname, pero unix las toma como variables, como le hago para que las tome como vistas? Te agradeceria tu ayuda, saludos…
desde root:
ORACLE_VERS=`echo «select * from v$version where banner like ‘Oracle%'» | sqlplus {$SRC_USER}/{$SRC_PASS} | grep «Oracle»
luego imprime ORACLE_VERS
echo ORACLE_VERS
para sacar la version de oracle desde root y hacer una consulta
su – oracle -c «echo «»select * from v$version where banner like ‘Oracle%'»» | sqlplus usuario/password»
use esta linea para correr una muchos *.sql
for i in `ls -1`; do echo «@$i ; exit; «| sqlplus user/pass@DB01; done ;
pd. los *.sql no tenian «exit»
saludos.
If you are going for most excellent contents like myself, only
go to see this web page daily since it provides feature contents, thanks
I believed this script was the best thing ever.
What you composed made a ton of sense. However,
think on this, what if you added a little content?
I ain’t saying your content is not good, but what if you added a post title that makes people desire more? I mean Algunas formas de ejecutar sqlplus desde un Shell Script | Java.Lang.NullPointer is a little boring. You should peek at Yahoo’s
front page and see how they write post titles to get people
to open the links. You might add a video or a pic or two to
grab people excited about what you’ve got to say. In my opinion, it might bring your posts a little livelier.
I’m amazed, I have to admit. Seldom do I come across a blog that’s both equally educative
and interesting, and without a doubt, you’ve hit the nail on the head. The problem is something that not enough men and women are speaking intelligently about. I am very happy that I stumbled across this in my hunt for something regarding this.
Hello, I believe your website could possibly be having web browser compatibility problems.
When I take a look at your web site in Safari, it looks fine but
when opening in IE, it has some overlapping issues.
I just wanted to give you a quick heads up! Aside from that, great website!
Non smokers experienced an increase in airway resistance from
a mean average of 182% to 206%. ) That is actually the best part ‘ imagine not being able to experience all of those while trying to change to a healthier lifestyle. The majority are untrustworthy, in particular the ones that are very cheap.
Great beat ! I would like to apprentice even as you amend your website, how
can i subscribe for a weblog web site? The account
helped me a acceptable deal. I were tiny bit acquainted of this your
broadcast provided shiny transparent concept
Simply want to say your article is as surprising.
The clearness on your put up is simply excellent and that i can assume you’re knowledgeable in this subject. Fine with your permission let me to grab your feed to stay updated with coming near near post. Thank you a million and please continue the gratifying work.
It’s perfect time to make a few plans for the longer term and it is time to be happy. I have learn this publish and if I may just I wish to counsel you some fascinating issues or advice. Maybe you can write next articles relating to this article. I want to read more issues approximately it!
This is a really good tip especially to those fresh to the
blogosphere. Brief but very precise info… Thank you for sharing this one.
A must read article!
Hi there colleagues, good post and nice urging commented at this place,
I am actually enjoying by these.
Estoy ejecutando SQLPlus dentro de un Shell Script y necesito saber como filtrar un rango de fechas (ejemplo: todas las fechas de un año) pasándosela como variable. Solamente me permite 2 posiciones para el año. Hay alguna forma de que pueda consultarlo con 4 posiciones ?. Muchas gracias
Para fines didácticos, es mejor usar palabras clave diferentes para cada variable (usuario, clave, services name/SID, host, etc). De esta forma, cuando se vea el llamado desde la línea de comandos via sqlplus, se los datos tomados desde el archivo tnsnames.ora.
En otras palabras, no usar ‘desa’ para todo.
These embody, but aren’t limited to polyvinyl chloride (PVC) ethylene propylene
diene monomer (EPDM), modified bituminous sheet roofing membranes with liquid membrane deck prep, hot fluid-applied polymer-modified
rubberized-asphalt waterproofing membranes, and
other proprietary roof membranes available that the design team might think about with proper investigation.
Muchísimas gracias por compartir. Me ha sido de gran utilidad.