Oracle
 sql >> база данни >  >> RDS >> Oracle

Получаване на грешка при изпълнение на Stroredprocedure

Както казва Николас Караснов, имате нужда от аргументите в повикването, за да съответстват на декларацията на процедурата. В този случай имате OUT параметър, така че имате нужда някъде за данните, които избирате да отидете - нещо, съответстващо на sys_refcursor тип параметър.

Ако използвате SQL*Plus, за да тествате това, можете да декларирате SQL*Plus променлива за това и след това го предайте като свързваща променлива и след това използвайте print команда за показване на съдържанието на курсора:

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

Това работи и в SQL Developer. Когато извикате процедурата от друг код, ще имате променлива, декларирана в PL/SQL блок или във външно приложение (напр. чрез jdbc ), но подробностите за тях зависят от това, което правите.

За да се обадите от Java, трябва да направите нещо като:

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

... но това граничи с псевдокод и ще трябва да прочетете документацията, за да попълните празните места (и да коригирате всички грешки; вероятно имате нужда от специфични за Oracle типове изрази например) и да добавите затваряне на обект и обработка на грешки всички всички тези други добри неща.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. REGEXP_REPLACE() Функция в Oracle

  2. Oracle за извличане на максимален запис

  3. SQL таблицата не съществува

  4. Защо типът данни Long е заменен с LOB в Oracle?

  5. Качвайте изображения като BLOB в Oracle с помощта на PHP