PLSQL函数声明

Stu*_*ler -1 sql oracle variables plsql function

我想接受一个数字并返回两次参数值.虽然我希望它顺其自然

float timestwo(float num){num*2; 返回num;}

然而,plsql似乎需要一种更加模糊的方法.我以为我已经遵循了oracle 11g要求的方法,但是在尝试执行下面的代码时,

exec dbms_output.enable(1000000); --boilerplate
set serveroutput on           --boilerplate
CREATE OR REPLACE FUNCTION timestwo (num
IN number)
RETURN number IS
   product number(2) := 0;
BEGIN
   product := (num*2);
   RETURN product;
END;
/
EXECUTE timestwo(5);
show error                       --boilerplate
Run Code Online (Sandbox Code Playgroud)

dbms引发以下错误:

ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00221: 'TIMESTWO' is not a procedure or is undefined
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
No errors
Run Code Online (Sandbox Code Playgroud)

很明显,函数声明是不正确的,但有人知道如何正确实现这个简单的代码吗?

Ale*_*ole 7

该函数有效,但您调用的方法不正确.你已经定义了一个函数.但是你会把它称为一个程序,正如错误所暗示的那样.

你可以这样做:

select timestwo(5) from dual;
Run Code Online (Sandbox Code Playgroud)

或者在SQL*Plus中:

var result number;
exec :result := timestwo(5);
print result
Run Code Online (Sandbox Code Playgroud)

您的函数实际上不需要product定义变量; 你可以略微简化为:

create or replace function timestwo(num in number)
return number is
begin
    return num*2;
end;
/
Run Code Online (Sandbox Code Playgroud)

...对于10提供超过两位数的产品的较大输入数字(例如)也不会出错.除非那是故意的,当然......*8-)

  • @Duncan - `create`和`execute`是两个单独的语句,错误在第二个语句的第1行.`exec`只是一个SQL*Plus简写,扩展为`begin timestwo(5); 结束;`,哪个不显而易见,以为我的错误显示了完整的东西.其中的字符7是函数名称中最合适的`t` - 这也可能增加了混淆. (3认同)