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

Hvordan bruger man en Oracle Ref Cursor fra C# ODP.NET som en ReturnValue Parameter uden at bruge en lagret funktion eller procedure?

Jeg vil prøve et svar i stedet for en anden kommentar.

Som jeg sagde i en kommentar, virker en ren/simpel select-sætning ikke i PL/SQL. Men jeg tog fejl, da jeg sagde, at du har brug for en gemt funktion for at returnere en ref-markør.

Men først ting først:Typen "id_array" du erklærer i din PL/SQL-blok er en PL/SQL-type. Det kan ikke bruges i en ref cursor select-sætning. I stedet skal du bruge en SQL-type:

create type id_array as table of number;

Dette skal kun udføres én gang, ligesom en "opret tabel".

Din PL/SQL-blok kunne så se sådan ud:

DECLARE
    t_ids   id_array;
BEGIN
    UPDATE WorkerStatus
    SET
         StateId = :StateId
        ,StateReasonId = :StateReasonId
    WHERE
        StateId = :CurrentStateId
    RETURNING Id BULK COLLECT INTO t_Ids;

    OPEN :rcursor FOR SELECT * FROM TABLE(cast(t_Ids as id_array));    
END;

PS:
Mens jeg samlede dette indlæg, indså jeg, hvor ORA-00942 kunne komme fra. Arrayet t_ids var baseret på en PL/SQL-type, som ikke er kendt/tilgængelig på SQL-siden.




  1. Sådan konfigureres PostgreSQL Sharding med ClusterControl

  2. Sådan trimmes en streng i SQLite

  3. Hvordan installeres Python MySQLdb-modulet ved hjælp af pip?

  4. Top 7 databaser