sql >> Database teknologi >  >> RDS >> Oracle

Oracle-lagret procedure:returner både resultatsæt og ud-parametre

I Oracle kan du ikke køre direct select-sætninger uden en INTO klausul.

Hvis du bruger Oracle 12c og nyere, kan du bruge en REF CURSOR og DBMS_SQL.RETURN_RESULT

create or replace procedure foo(empId IN NUMBER, maxSalary OUT NUMBER) AS
q SYS_REFCURSOR;
 BEGIN
    OPEN q FOR select * from Employee e where e.id >=empId;
     DBMS_SQL.return_result (q); -- This will display the result
    select max(salary) into maxSalary from Employee;
END;

For tidligere versioner (11g,10g) kan du sende en REF CURSOR som en OUT parameter og udskriv den fra sqlplus eller TOAD ved at køre som script.

create or replace procedure foo(empId IN NUMBER, maxSalary OUT NUMBER,
   q OUT SYS_REFCURSOR) AS

     BEGIN
        OPEN q FOR select * from Employee e where e.id >=empId;
        select max(salary) into maxSalary from Employee;
    END;

Definer bindevariabler før proceduren kaldes.

VARIABLE v_empID NUMBER
VARIABLE v_maxsalary NUMBER
VARIABLE v_q REFCURSOR

EXEC :v_empID := 101
EXEC foo(:v_empID,:v_maxsalary,:v_q ) 
PRINT v_q -- This will display the result from the query.



  1. Sammenkæd flere resultatrækker i én kolonne til én, grupper efter en anden kolonne

  2. Oracle SQL DATE-konverteringsproblem ved brug af iBATIS via Java JDBC

  3. Oracle Database Explorer:Gratis træning og akkreditering

  4. LOG() Eksempler i SQL Server