Ya no necesitas investigar más por todo internet ya que llegaste al lugar justo, contamos con la respuesta que necesitas recibir y sin problema.
Solución:
Tienes que pasar en un REFCURSOR
para que el procedimiento lo use como salida (OUT
) parámetro.
Procedimiento rápido para probar con:
CREATE OR REPLACE PROCEDURE passenger_details
(p_passenger_details OUT SYS_REFCURSOR)
AS
BEGIN
OPEN p_passenger_details FOR
SELECT 'test test' as Full_Name, 10 as Age, 'alien' as Nationality, 'foo' as Category,
'Name' as Airline_Name, 'wobble' as Class_Type
FROM dual;
END passenger_details;
/
Prueba en SQL*Plus:
SQL> variable mycursor refcursor; SQL> exec passenger_details ( :mycursor ); PL/SQL procedure successfully completed. SQL> print mycursor; FULL_NAME AGE NATIO CAT AIRL CLASS_ --------- ---------- ----- --- ---- ------ test test 10 alien foo Name wobble SQL>
Puedes usar dbms_sql
para devolver resultados implícitos. Esta fue una función agregada a Oracle 12 para facilitar la migración desde SQL Server:
CREATE PROCEDURE passenger_details
AS
c1 SYS_REFCURSOR;
BEGIN
open c1 for
SELECT Full_Name, Age, Nationality, Category, Airline_Name, Class_Type
FROM Passenger
JOIN Ticket on Passenger.Passenger_No = Ticket.Passenger_No
JOIN Airline ON Airline.Airline_No = Ticket.Airline_No
JOIN Class ON Class.Class_No = Ticket.Class_No;
DBMS_SQL.RETURN_RESULT(c1);
END;
/
Tenga en cuenta que reemplacé las uniones implícitas antiguas y obsoletas con un explícito JOIN
operador.
Comentarios y calificaciones
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)