警告:执行完成并显示警告功能

时间:2015-02-18 12:04:37

标签: sql oracle plsql

我试图创建一个函数来计算Fibonacci序列的第N个元素。

CREATE OR REPLACE FUNCTION fib_mohamed_h(x number)
RETURN number IS
  f number;
DECLARE
  num number;
  fibbonnacci number
BEGIN
  IF (x<3) THEN
    f := 1;
  ELSE
    f := fib_mohamed_h(x-1)+fib_mohamed_h(x-2);
  END IF;
  RETURN f;
  x:= 3;
  fibbonnacci := fib_mohamed_h(x);
  dbms_output.put_line(' Fibbonnacci '|| x || ' is ' || fibbonnacci);
END;

这得到:

  

警告:执行完成后会发出警告   功能fib_mohamed_h(x编译。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

您似乎已将函数声明和对函数的调用合并为一个无效块。它看起来几乎像一个剪切和粘贴错误。根据你的逻辑,函数应该是:

CREATE OR REPLACE FUNCTION fib_mohamed_h(x number)
RETURN number IS
 f number;
BEGIN
  IF (x<3) THEN
    f := 1;
  ELSE
    f := fib_mohamed_h(x-1)+fib_mohamed_h(x-2);
  END IF;
  RETURN f;
END;
/

电话可能是:

set serveroutput on size unlimited
DECLARE
  x number;
  fibbonnacci number;
BEGIN
  x:= 3;
  fibbonnacci := fib_mohamed_h(x);
  dbms_output.put_line(' Fibbonnacci '|| x || ' is ' || fibbonnacci);
END;
/

anonymous block completed
 Fibbonnacci 3 is 2

或者从纯SQL:

SELECT fib_mohamed_h(7) FROM dual;

FIB_MOHAMED_H(7)
----------------
              13 

SQL Fiddle demo

Read more about how to create functions