2014-01-29 233 views
0

我正在尝试为 Example 7-2 Fibonacci Sequence之后的Oracle创建Java存储过程。在Oracle中调用Java存储过程

我已经有过一样的历程,但在执行代码

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: 

谁能帮助?

回答

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 
+0

做完这对SQL开发人员,但仍得到相同的错误。我认为我错过了一些被理解的东西 – user3249898

+0

CALL fib(:n)INTO:f; 行在SQL Developer中执行时导致问题 – user3249898

0

我不太了解SQL Developer产品,以上内容可能只适用于SQL Plus。

尝试:

SELECT fib(7) FROM dual;