2011-03-29 51 views
10

Pude crear un procedimiento almacenado para una base de datos Oracle, pero ahora no puedo encontrar la manera de ejecutarlo. Estoy usando SQL ardilla y esta trabajado para crear el procedimiento:Llamar a un procedimiento almacenado de Oracle en Squirrel SQL

CREATE OR REPLACE PROCEDURE MyProc(label IN varchar2, results OUT sys_refcursor) AS 
BEGIN 
OPEN results FOR 
    SELECT Label, Count, Timestamp 
     FROM table1 
      LEFT JOIN table2 ON table1.Name=table2.Name 
    WHERE table1.Label=label 
    ORDER BY Timestamp; 
END; 
/

Quiero ser capaz de obtener y mostrar el conjunto de resultados. He intentado usar call MyProc('param'), pero esto no funciona (error de número de argumentos erróneos). He buscado mucho en este sitio y en otros, pero nada ha sido útil. ¡Por favor ayuda!

+0

@ respuesta de dovka parece ser el único que responde la pregunta. Kayeight no estaba preguntando cómo llamar a los procedimientos de Squirrel. El título actual de la pregunta, "Llamar a un procedimiento almacenado de Oracle en Squirrel SQL", es engañoso. – Lambart

Respuesta

0
var v_result sys_refcursor 

exec MyProc ('test label',:v_result) 
+0

No tengo SQL * Plus, estoy usando Squirrel SQL, así que esto no funciona. :( – Kayeight

+0

Esta sintaxis es específica de Oracle. ¿Ha instalado el complemento de Oracle en SQL Squirrel? Http://www.squirrelsql.org/index.php?page=plugins –

+0

Dice que el complemento está instalado, pero obtengo un ORA-00900 : error de instrucción SQL no válido ... – Kayeight

3

La única sintaxis consigo trabajo en Squirrel SQL es PL/SQL bloque:

declare 
v_label varchar2:='SOMELABEL'; 
TYPE ref_cursor IS REF CURSOR; 
v_cur_results ref_cursor; 
begin 
MyProc (v_label, v_cur_results) 
end; 
/
2

Como this article explica, mediante "llamada" en lugar de "ejecutar" debería resolver el problema.

+0

Lea la pregunta nuevamente: el interlocutor ya sabía acerca de 'llamar' – Lambart

+0

El enlace al artículo está muerto –

16

las siguientes obras para ejecutar un procedimiento almacenado:

begin 
    procedurename; 
end; 
/

Sí, la barra al final es necesario!

begin...end; declara un bloque PL/SQL (específico de Oracle). La barra inclinada es el comando para ejecutar el bloque.

/(barra)

ejecuta el comando SQL ejecutada más recientemente o bloque PL/SQL que se almacena en la memoria intermedia de SQL.

[...]

Oracle Database Online Documentation, 10g Release 2 (10.2)/SQL*Plus® User's Guide and Reference

+0

¿Cómo funciona? esto responde la pregunta? @ El procedimiento almacenado de Kayeight tiene dos parámetros: uno en y otro fuera. Entonces, ¿cómo se puede llamar a un procedimiento almacenado con un parámetro 'fuera', a través de Squirrel SQL? Si el 'begin procedurename; end; /' sintaxis es superior a 'invocar nombre de procedimiento;', explique por qué. – Lambart

+0

perfecto .......... – deFreitas

+0

_ .. es necesario .._ como son los 2 en lugar de 3 puntos y comas! – nsandersen

0

He luchado con esto durante mucho tiempo, pero he conseguido que funcione de esta manera:

{call DBMS_SESSION.SET_CONTEXT (namespace => 'clientcontext', attribute => 'foo', value  => 'bar')} 
Cuestiones relacionadas