sql >> Database >  >> RDS >> Oracle

Foutmelding tijdens het uitvoeren van Stroredprocedure

Zoals Nicholas Karasnov zegt, heb je de argumenten in de aanroep nodig om overeen te komen met de procedureverklaring. In dit geval heb je een OUT parameter, dus je hebt een plek nodig waar de gegevens die je selecteert naartoe moeten gaan - iets dat overeenkomt met de sys_refcursor parametertype.

Als u SQL*Plus gebruikt om dit te testen, kunt u een SQL*Plus variabele hiervoor en geef dat dan door als een bindvariabele, en gebruik dan de print commando om de cursorinhoud weer te geven:

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

Dit werkt ook in SQL Developer. Als je de procedure vanuit een andere code aanroept, heb je een variabele gedeclareerd in een PL/SQL-blok, of in een externe applicatie (bijvoorbeeld via jdbc ), maar de details hiervan hangen af ​​van wat je doet.

Als u vanuit Java wilt bellen, doet u zoiets als:

// 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
}

... maar dat grenst aan pseudocode, en je moet de documentatie lezen om de lege plekken in te vullen (en eventuele fouten corrigeren; je hebt waarschijnlijk bijvoorbeeld Oracle-specifieke instructietypen nodig), en alles toevoegen aan objectafsluiting en foutafhandeling dat andere goede spul.




  1. GRIEKSE tekens weergeven in de logboekconsole van JDeveloper

  2. Problemen met het opzetten van een postgreSQL-database voor een django-project

  3. GraphQL - retourneer berekend type afhankelijk van argument

  4. MYSQL - GROUP_CONCAT EN FIND_IN_SET zijn het mengen van waarden/volgorde?