2014-01-29 196 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;