sql >> Databasteknik >  >> RDS >> Oracle

Får fel när Stroredproceduren körs

Som Nicholas Karasnov säger behöver du argumenten i samtalet för att matcha förfarandedeklarationen. I det här fallet har du en OUT parameter, så du behöver någonstans för att data du väljer ska gå - något som motsvarar sys_refcursor parametertyp.

Om du använder SQL*Plus för att testa detta kan du deklarera en SQL*Plus-variabel för detta och skicka det sedan som en bindningsvariabel och använd sedan print kommando för att visa markörinnehållet:

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

Detta fungerar också i SQL Developer. När du anropar proceduren från annan kod kommer du att ha en variabel deklarerad i ett PL/SQL-block, eller i en extern applikation (t.ex. via jdbc ), men detaljerna i dessa beror på vad du gör.

För att ringa från Java, skulle du göra något i stil med:

// 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 är på gränsen till pseudokod, och du måste läsa dokumentationen för att fylla i de tomma fälten (och korrigera eventuella fel, du behöver förmodligen Oracle-specifika satser till exempel), och lägga till objektstängning och felhantering alla alla det där andra bra.




  1. kontrollera värde i n-djup träd?

  2. Pycharm-fel:Felaktigt konfigurerad

  3. FATAL:rollroten finns inte

  4. mysql count dubbletter