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

Får fejl under udførelse af Stroredprocedure

Som Nicholas Karasnov siger, skal du have argumenterne i opfordringen til at matche procedureerklæringen. I dette tilfælde har du en OUT parameter, så du skal bruge et sted for de data, du vælger at gå - noget, der svarer til sys_refcursor parametertype.

Hvis du bruger SQL*Plus til at teste dette, kan du erklære en SQL*Plus-variabel for dette, og send det derefter som en bindevariabel, og brug derefter print kommando for at vise markørens indhold:

variable rc refcursor
exec javao(1, :rc);
print rc

Dette virker også i SQL Developer. Når du kalder proceduren fra anden kode, vil du have en variabel deklareret i en PL/SQL-blok eller i en ekstern applikation (f.eks. via jdbc ), men detaljerne i dem afhænger af, hvad du laver.

For at ringe fra Java skal du gøre noget som:

// get connection
CallableStatement cStmt = conn.prepareCall("{ call javao(?, ?) }");
cStmt.setInt(1, 1);
cStmt.registerOutParameter(2, OracleTypes.cursor);
cStmt.execute();
ResultSet rSet = ((OracleCallableStatement) cStmt).getCursor(2);
while (rSet.next())
{
    // get columns from result set row and do something with the data
}

... men det grænser op til pseudokode, og du bliver nødt til at læse dokumentationen for at udfylde de tomme felter (og rette eventuelle fejl; du har sandsynligvis brug for Oracle-specifikke sætningstyper for eksempel), og tilføje objektlukning og fejlhåndtering alle alle de andre gode ting.




  1. Få ugens startdato og ugens slutdato fra ugenummer

  2. Hvad er MariaDB Enterprise Cluster?

  3. Slet, afkort eller slip for at rense en tabel i MySQL

  4. Forbindelsesstrengparametre for Excel-datakilder