2011-05-17 16 views
11

disculpa por hacer esta pregunta, pero es porque ninguna de las respuestas dadas antes es suficiente para que yo pueda entender. Quiero escribir un procedimiento almacenado que devuelve todas las columnas en un table.As una consulta ad hod acabo de escribirSeleccionar la declaración dentro de un procedimiento en Oracle

SELECT * FROM EMPLOYEES 

pero aquí, me sale un error que me pide que proporcione INTO cláusula que no lo hago Entiendo por qué y cómo. ¿Alguien podría explicar cómo haría eso tanto en el caso anterior como cuando deseo devolver solo los valores de una columna (múltiples filas)?

+0

por favor muestre el código que intentó, los errores exactos que está obteniendo, y lea la documentación de pl/sql. – Mat

Respuesta

15

Las personas con un fondo de SQL Server se utilizan para escribir procedimientos almacenados que devuelven resultados de la consulta enteros y así tratar de escribir procedimientos PL/SQL o menos así:

procedure get_emps is 
begin 
    -- this will NOT work! 
    select * from emp; 
end; 

Por desgracia, no es así de simple. Probablemente, el equivalente más cercano en PL/SQL es una función que devuelve un cursor ref:

function get_emps return sys_refcursor is 
    rc sys_refcursor; 
begin 
    open rc for 
     select * from emp; 
    return rc; 
end; 

se le puede llamar desde un programa llamado así:

declare 
    cur sys_refcursor; 
    emp_rec emp%rowtype; 
begin 
    cur := get_emps; 
    loop 
     fetch cur into emp_rec; 
     exit when cur%notfound; 
    end loop; 
    close cur; 
end; 

o en SQL Plus que podría hacer:

var rc refcursor 
:rc := get_emps; 
print rc 
+0

Gracias Tony. Lo tengo todo. –

+0

Querido, Tony, votaré y acepto tu respuesta si pudieras decirme cómo se hace –

+2

¿Cómo se hace? Lo siento, tomé "Gracias Tony. Lo tengo todo" para decir que entendiste completamente mi respuesta. ¿Qué no entiendes? –

Cuestiones relacionadas