请问自定义的Oracle函数,怎样调用才正确?

javagang 2014-02-05 10:51:04
CREATE OR REPLACE FUNCTION get_salaries(
emp_no IN NUMBER,
emp_count OUT NUMBER
)
RETURN NUMBER
AS
v_sum NUMBER;
BEGIN
SELECT SUM(sal), count(1) INTO v_sum, emp_count
FROM tmp_emp;
RETURN v_sum;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
DBMS_OUTPUT.PUT_LINE('no records.');
WHEN OTHERS
THEN
DBMS_OUTPUT.PUT_LINE('other errors.');
END get_salaries;


-- 调用函数get_salaries例程
DECLARE
v_num NUMBER;
v_sum NUMBER;
BEGIN
v_sum := get_salaries(7788, v_num);
DBMS_OUTPUT.PUT_LINE(v_num || ' employees salaries are ' || v_sum);
END;


我自己写了个例程,放到PL/SQL Developer中运行,但是毫无结果;可我在左侧的function列表中已经能够看到我自定义的get_salaries函数,但是查看详细信息的时候发现有如下错误提示,请问错误在哪里?谢谢!

Compilation errors for FUNCTION SYS.GET_SALARIES

Error: PLS-00103: 出现符号 "DECLARE"
Line: 23
Text: DECLARE

Error: PLS-00103: 出现符号 "end-of-file"在需要下列之一时:
(
begin case declare end exception exit for goto if loop mod
null pragma raise return select update while with
<an identifier> <a double-quoted delimited-identifier>
<a bind variable> << continue close current delete fetch lock
insert open rollback savepoint set sql execute commit forall
merge pipe purge
Line: 29
Text: END;

...全文
216 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
_拙计 2014-02-17
  • 打赏
  • 举报
回复
引用 1 楼 javagang 的回复:
刚才试了一下,我用sys用户登录,如下调用就能正确使用: sys.get_salaries(7788, v_num); 是不是说,我定义的这个函数不是全局的,只有登录者才能够使用? 如果我想定义全局函数该怎么办呢?
select get_salaries(7788,'') from dual
javagang 2014-02-05
  • 打赏
  • 举报
回复
刚才试了一下,我用sys用户登录,如下调用就能正确使用: sys.get_salaries(7788, v_num); 是不是说,我定义的这个函数不是全局的,只有登录者才能够使用? 如果我想定义全局函数该怎么办呢?

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧