tipos salida procedimientos procedimiento parametros funciones ejemplos ejecutar developer con bloques bloque anonimo almacenado oracle plsql prompt

oracle - salida - Ejecute SCRIPT desde el bloque PL/SQL



procedure oracle ejemplos (5)

ejecutar inmediatamente ''start prompt1'';

Ejecutar inmediato es ejecutar sentencias SQL, no comandos arbitrarios.

¿Puedo obtener un valor de prompt1 en mi bloque PL / SQL donde estoy llamando al script

Puede ejecutar un script de ejecución, pero dudo que pueda capturar la entrada desde un script SQL, especialmente dentro de un bloque PL / SQL.

¿Cómo usar "INICIAR SCRIPT" en el bloque pl / sql?

Quiero usar algo como esto

declare begin proc(para1,para2); execute immediate ''start prompt1'' ; end; /

También quiero saber, ¿puedo obtener un valor de prompt1 en mi bloque PL / SQL donde estoy llamando al script? Porque necesito usar el valor para realizar algunas operaciones en el bloque PL / SQL.


Si está usando sql * plus (o una herramienta que lo está usando), puede hacer algo como esto:

set serveroutput on variable a number; begin :a := &promt; dbms_output.put_line(:a); end; /

Si se ejecuta en lote, puede hacer lo siguiente:

variable a number; begin :a := &1; dbms_output.put_line(:a); end;

y obtener el valor de: a como parámetro-

sqlplus sdad/fdsfd@fdggd @<your_script.sql> <val_for_a>


Puede escribir un bloque pl / sql en SqlPlus para verificar un parámetro de una tabla y luego ejecutar un script. En el script que se ejecutará (MyScript.sql a continuación), los terminadores de declaración deben ser ";" en lugar de "/"

declare vMyParameter number := 0; begin select count(*) into vMyParameter from MyTable where MyCheckValue = ''Y''; if vMyParameter = 1 then @MyFolder/MyScript.sql; end if; end; /


Es 2012 2017. Los guiones son una resaca torpe y frágil del último milenio. Oracle tiene una fantástica gama de funcionalidades que podemos ejecutar en PL / SQL, además de los procedimientos almacenados de Java, y hay programación para comenzar trabajos. Además de ejecutar DDL para crear o modificar esquemas, casi no hay necesidad de scripts en un entorno de base de datos Oracle; incluso los scripts DDL deben activarse desde un cliente externo, probablemente una herramienta de compilación como TeamCity.

En particular, consideraría intentar ejecutar un script SQL desde un programa PL / SQL como una falla arquitectónica. ¿Qué estás haciendo con el script que no puedes hacer con un procedimiento almacenado?

En cuanto a pasar entrada a un procedimiento almacenado, para eso están los parámetros. PL / SQL no es interactivo, necesitamos un cliente para ingresar los valores. Dependiendo de la situación, esto puede hacerse de forma asíncrona (valores en un archivo o una tabla) o de forma síncrona (llamando al procedimiento almacenado desde SQL * Plus, SQL Developer o una interfaz personalizada).

Habiendo dicho todo eso, en el mundo real trabajamos con arquitecturas desordenadas con interdependencias entre la base de datos y el sistema operativo externo. Entonces, ¿qué podemos hacer?

  1. Podemos escribir un Procedimiento almacenado de Java para ejecutar comandos de shell. Esta es la solución venerable, habiendo estado presente desde Oracle 8i. Descubra más .
  2. En 10g Oracle, reemplace DBMS_JOB con DBMS_SCHEDULER. Una de las mejoras de esta herramienta es su capacidad para ejecutar trabajos externos, es decir, scripts de shell. Descubra más .
  3. Dado que las tablas externas de Oracle 11g R1 admiten scripts de preprocesador, que ejecutan comandos de shell antes de consultar la tabla. Descubra más .

Tenga en cuenta que todas estas opciones requieren acceso elevado (concesiones en objetos DIRECTORIO, credenciales de seguridad, etc.). Estos solo pueden ser otorgados por usuarios privilegiados (es decir, DBA). A menos que nuestra base de datos tenga una configuración de seguridad sorprendentemente laxa, no hay forma de que ejecutemos un script de shell arbitrario desde PL / SQL.

Finalmente, no está claro qué beneficio se espera al ejecutar un script SQL en PL / SQL. Recuerde que PL / SQL se ejecuta en el servidor de la base de datos, por lo que no puede ver las secuencias de comandos en la máquina del cliente . Esto parece relevante a la luz del requisito de aceptar la entrada del usuario.

Quizás la solución más simple es la reconfiguración del script original. Divida la llamada PL / SQL necesaria en un bloque y luego simplemente llame al script con nombre:

begin proc(para1,para2); end; / @prompt1.sql


Otra práctica es ejecutar en un *.bat con parámetros, como:

Ejemplo c: /oracle/bin/sqlplus.exe -w @c: / name

sql% 1% 2 @c: /output.sql