簡體   English   中英

在Oracle中調用Java存儲過程

[英]Calling Java Stored Procedure in Oracle

我正在嘗試按照示例7-2 Fibonacci Sequence的方式為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:

有人可以幫忙嗎?

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

我對SQL Developer產品了解不多,上面的內容可能僅適用於SQL Plus。

嘗試:

SELECT fib(7) FROM dual;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM