Oracle函数的创建问题 用的是scott用户的emp表
createorreplacefunctionfu_pr02return----创建函数fu_pr022numberisyearsalnumber(7,2);---定义自...
create or replace function fu_pr02 return----创建函数fu_pr02
2 number is yearsal number(7,2);---定义自变量yearsal
3 begin
4 select sal*12+nvl(comm,0)*12 into yearsal from emp where ename='WARD';--查询用户名叫wade的年薪并赋值给yearsal
5 return yearsal;
6 end;
7 /
var income number;----执行函数fu_pr02
call fu_pr02 into:income;
-------------------------------------------------------------------------------------------------------------结果报错
call fu_pr02 into:income
ORA-06576: 不是正确的函数或程序名称 展开
2 number is yearsal number(7,2);---定义自变量yearsal
3 begin
4 select sal*12+nvl(comm,0)*12 into yearsal from emp where ename='WARD';--查询用户名叫wade的年薪并赋值给yearsal
5 return yearsal;
6 end;
7 /
var income number;----执行函数fu_pr02
call fu_pr02 into:income;
-------------------------------------------------------------------------------------------------------------结果报错
call fu_pr02 into:income
ORA-06576: 不是正确的函数或程序名称 展开
2个回答
展开全部
你这是无返回类型啊。
应该这么写试试。
create or replace function fu_pr02 return varchar2 as ----创建函数fu_pr02
2 number is yearsal number(7,2);---定义自变量yearsal
3 begin
4 select sal*12+nvl(comm,0)*12 into yearsal from emp where ename='WARD';--查询用户名叫wade的年薪并赋值给yearsal
5 return yearsal;
6 end;
应该这么写试试。
create or replace function fu_pr02 return varchar2 as ----创建函数fu_pr02
2 number is yearsal number(7,2);---定义自变量yearsal
3 begin
4 select sal*12+nvl(comm,0)*12 into yearsal from emp where ename='WARD';--查询用户名叫wade的年薪并赋值给yearsal
5 return yearsal;
6 end;
更多追问追答
追问
create or replace function fu_pr02 return ----创建函数fu_pr02
number is 这个number就是返回类型啊
追答
无所谓了。oracle的 函数。没那么多讲究。。你返回的是varchar2 也可以用别的类型接收的 。。如果出错的话。那就把varchar2换成 number吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-03-05
展开全部
目测是 函数的调用方式不正确。
尝试使用
SELECT 函数名() FROM dual ; 的方式来调用看看?
如果还有问题, 那有可能是 函数编译不通过了。
SQL> CREATE OR REPLACE FUNCTION HelloWorld4
2 RETURN VARCHAR2 IS
3 BEGIN
4 RETURN 'Hello World!';
5 END HelloWorld4;
6 /
Function created.
SQL> SELECT HelloWorld4() FROM DUAL;
HELLOWORLD4()
--------------------------------------------
Hello World!
尝试使用
SELECT 函数名() FROM dual ; 的方式来调用看看?
如果还有问题, 那有可能是 函数编译不通过了。
SQL> CREATE OR REPLACE FUNCTION HelloWorld4
2 RETURN VARCHAR2 IS
3 BEGIN
4 RETURN 'Hello World!';
5 END HelloWorld4;
6 /
Function created.
SQL> SELECT HelloWorld4() FROM DUAL;
HELLOWORLD4()
--------------------------------------------
Hello World!
追问
create or replace function fu_pr01(fuename varchar2) return number is --创建函数
yearsal number(7,2);--定义变量
begin--执行部分
select sal*12+nvl(comm,0)*12 into yearsal from emp where ename=fuename;
return yearsal;
end;
var income number;call fu_pr02('SCOTT') into:income
这个是执行成功了,这两个可以用call 函数名 into一个不能用是什么原因
追答
call 我好像没怎么在 Oracle 里面用过啊。
就算是你需要在 存储过程里面调用函数, 也是直接写
变量 := 函数名 (); 的啊。
不需要什么 call into 的啊
不知道你从哪里看到的这个 call into 的用法啊?
SQL> DECLARE
2 income VARCHAR2(20);
3 BEGIN
4 income := HelloWorld4();
5 dbms_output.put_line(income);
6 END;
7 /
Hello World!
PL/SQL 过程已成功完成。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询