Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Błąd podczas wykonywania procedury Strored

Jak mówi Nicholas Karasnov, potrzebne są argumenty w wezwaniu, aby pasowały do ​​deklaracji procedury. W tym przypadku masz OUT parametr, więc potrzebujesz gdzieś danych, które wybierasz, aby przejść - coś odpowiadającego sys_refcursor typ parametru.

Jeśli używasz SQL*Plus do testowania tego, możesz zadeklarować Zmienna SQL*Plus w tym celu, a następnie przekaż ją jako zmienną wiązania, a następnie użyj print polecenie, aby wyświetlić zawartość kursora:

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

Działa to również w SQL Developer. Kiedy wywołasz procedurę z innego kodu, będziesz miał zmienną zadeklarowaną w bloku PL/SQL lub w zewnętrznej aplikacji (np. przez jdbc ), ale szczegóły zależą od tego, co robisz.

Aby zadzwonić z Javy, musisz zrobić coś takiego:

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

... ale to graniczy z pseudokodem i będziesz musiał przeczytać dokumentację, aby wypełnić puste pola (i poprawić wszelkie błędy; prawdopodobnie potrzebujesz na przykład typów instrukcji specyficznych dla Oracle) i dodać zamykanie obiektów i obsługę błędów wszystkich inne dobre rzeczy.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy Oracle sqlldr może zaakceptować wpis TNS jako kwalifikator wystąpienia w Oracle 10 i 11?

  2. Suma bieżąca według zgrupowanych rekordów w tabeli

  3. Oracle DB prosty SELECT, gdzie kolejność kolumn ma znaczenie

  4. SQL nie wyświetla wartości null w zapytaniu nie równa się?

  5. ROWIDTOCHAR() Funkcja w Oracle