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: 不是正确的函数或程序名称
展开
 我来答
百度网友3b4e952
2013-03-05 · TA获得超过472个赞
知道小有建树答主
回答量:409
采纳率:100%
帮助的人:328万
展开全部
你这是无返回类型啊。
应该这么写试试。
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!
追问
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 过程已成功完成。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式