在Oracle中调用Java存储过程

时间:2014-01-29 17:30:57

标签: java oracle stored-procedures

我正在尝试为Oracle创建Java存储过程 Example 7-2 Fibonacci Sequence

我完成了相同的过程,但在执行代码时

SQL> VARIABLE n NUMBER
SQL> VARIABLE f NUMBER
SQL> EXECUTE :n := 7;
SQL> CALL fib(:n) INTO :f;

我得到以下回复:

anonymous block completed

Error starting at line 4 in command:
CALL fib(:n) INTO :f
Error report:
SQL Error: ORA-01008: not all variables bound
01008. 00000 -  "not all variables bound"
*Cause:    
*Action:

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

Oracle文档中存在很多编码错误(有时会遗漏,有时会出现错误)......无论如何,我认为问题在于该类是如何加载的。

尝试加载这样的类:

create or replace and compile java source named Fibonacci as
public class Fibonacci
{
  public static int fib (int n)
  {
    if (n == 1 || n == 2)
      return 1;
    else
      return fib(n - 1) + fib(n - 2);
  }
}

确保函数包装器有效,然后重试。

CREATE OR REPLACE FUNCTION fib (n NUMBER) RETURN NUMBER
AS LANGUAGE JAVA
NAME 'Fibonacci.fib(int) return int';

我尝试时输出正确。

SQL> VARIABLE n NUMBER
SQL> VARIABLE f NUMBER
SQL> EXECUTE :n := 7;
PL/SQL procedure successfully completed
n
---------
7
SQL> CALL fib(:n) INTO :f;
Method called
n
---------
7
f
---------
13
SQL> PRINT f
f
---------
13

答案 1 :(得分:0)

我对SQL Developer产品知之甚少,上面的内容可能仅适用于SQL Plus。

尝试:

SELECT fib(7) FROM dual;