Sus procedimientos almacenados trabajan como Coded . El problema es con la última línea, no puede invocar ninguno de sus procedimientos almacenados.
Tres opciones en SQL * Plus son: call
, exec
, y un bloque de PL/SQL anónimo.
call
parece ser una palabra clave SQL, y está documentada en la Referencia SQL. http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_4008.htm#BABDEHHG El diagrama de sintaxis indica que se requieren parentesis, incluso cuando no se pasan argumentos a la rutina de llamada.
CALL test_sp_1();
Un anónimo bloque PL/SQL es PL/SQL que no está dentro de un llamado procedimiento, una función de disparo, etc. Se puede utilizar para llamar a su procedimiento.
BEGIN
test_sp_1;
END;
/
Exec
es un comando SQL * Plus que es un acceso directo para el bloque anónimo anteriormente.EXEC <procedure_name>
se pasarán al servidor DB como BEGIN <procedure_name>; END;
ejemplo completo:
SQL> SET SERVEROUTPUT ON
SQL> CREATE OR REPLACE PROCEDURE test_sp
2 AS
3 BEGIN
4 DBMS_OUTPUT.PUT_LINE('Test works');
5 END;
6/
Procedure created.
SQL> CREATE OR REPLACE PROCEDURE test_sp_1
2 AS
3 BEGIN
4 DBMS_OUTPUT.PUT_LINE('Testing');
5 test_sp;
6 END;
7/
Procedure created.
SQL> CALL test_sp_1();
Testing
Test works
Call completed.
SQL> exec test_sp_1
Testing
Test works
PL/SQL procedure successfully completed.
SQL> begin
2 test_sp_1;
3 end;
4/
Testing
Test works
PL/SQL procedure successfully completed.
SQL>
Gracias por que sin embargo cuando trato de ejecutar que el uso LLAME a sp_1; Recibo el siguiente error. de error a partir de la línea 21 al mando: LLAMADA test_sp_1 informe error: SQL error: ORA-06576: no es una función o procedimiento nombre válido 06576. 00000 - "no una función o procedimiento nombre válido" * Causa: Podría no encontrar una función (si una cláusula INTO estaba presente) o un procedimiento (si la declaración no tenía una cláusula INTO) para llamar a . * Acción: cambie la instrucción para invocar una función o procedimiento – electricsheep
@Michael Lockwood: ¿Puede publicar su código en su pregunta original? Además, si llama a una función utilizando una herramienta como SQL * PLus, debe asignar el valor de retorno a una variable. – dcp
@ML: ¿por qué todavía está tratando de usar CALL cuando CALL no funciona (no es una declaración PL/SQL válida) y dcp le ha mostrado cómo hacerlo correctamente? –