jump to navigation

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.

Comentarios»

1. racuna - May 16, 2007

First.

muy útil la info, la verdad.

2. racuna - May 16, 2007

gracias

3. juan roberto gonzalez - septiembre 26, 2007

se puede ejecutar un bloque anonimo de esta forma?
y que dentro de ese bloque anonimo se capture la salida por dbms_output???

4. Ignacio Yuste - noviembre 27, 2007

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

peter - marzo 7, 2017

Creo que puedes poner:

variable=`SQLPLUS……EOF`

5. superpiwi - noviembre 27, 2007

Podrias hacer algo parecido a esto:

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.

6. marta - febrero 26, 2009

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.

7. JOHN RESTREPO A - marzo 4, 2009

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

8. carlos - junio 8, 2010

./oracle.sh: 3: Syntax error: «|» unexpected

he intentando la primera forma pero me da ese error de sintasis

9. Ube - junio 15, 2011

hola,

me meti en esta sesion a sacar información para crear una shell con sql, me sirvio muchisimo, gracias.

10. ChXt0 - diciembre 2, 2011

Me has salvado, muchas gracias

11. Andres R Lopez F - junio 11, 2012

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.

12. Master77 - junio 13, 2012

Como puedo ejecutar sqlplus / as sysdba con sólo apretar la letra q y luego la tecla ENTER??? HELP MEEEEE PLEASEEEEEEE!!!!!

13. Fernando - junio 19, 2012

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…

14. frank - agosto 21, 2012

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

15. frank - agosto 21, 2012

su – oracle -c «echo «»select * from v$version where banner like ‘Oracle%'»» | sqlplus usuario/password»

16. himer - octubre 5, 2012

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.

17. stay - diciembre 4, 2012

If you are going for most excellent contents like myself, only
go to see this web page daily since it provides feature contents, thanks

18. http://www.prnewswire.com/news-releases/green-smoke-e-cig-review--coupon-in-the-battle-for-best-e-cig-do-green-smoke-e-cigs-deliver-A-real-punch-awesomealldaycom-tests-Green-smoke-e-cigs-193843291.html - abril 9, 2013

I believed this script was the best thing ever.

19. http://www.sfgate.com/business/prweb/ar ... 075176.php - abril 19, 2013

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.

20. www.prairiestateoutdoors.com - May 11, 2013

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.

21. Nona - junio 26, 2013

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!

22. electronic cigarette menthol - junio 27, 2013

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.

23. Glinda - julio 2, 2013

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

24. Costa Mesa Chiropractic Treatment - julio 7, 2013

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.

25. christmas dresses for toddlers - julio 26, 2013

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!

26. Los Angeles Video Production - agosto 3, 2013

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!

27. thesaurus - septiembre 28, 2014

Hi there colleagues, good post and nice urging commented at this place,
I am actually enjoying by these.

28. Juan Carlos Mazza - noviembre 13, 2014

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

29. dvst - May 9, 2016

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.

30. roof restoration melbourne north - May 18, 2016

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.

31. Raul Baron - junio 22, 2016

Muchísimas gracias por compartir. Me ha sido de gran utilidad.


Replica a marta Cancelar la respuesta