设为首页 - 加入收藏 PHP编程网 - PHP站长网 (http://www.52php.cn)- 电商,百科,编程,业界,移动互联,5G,云计算,站长网!
热搜: 专业 娱乐 服务 百度
当前位置: 首页 > 站长百科 > 正文

在ORACLE的select语句中调用PL / SQL中的函数

发布时间:2021-01-24 12:12 所属栏目:[站长百科] 来源:网络整理
导读:这是我的PL / SQL函数部分.我试图在select语句中使用该函数.例如,我们可以从table_name中编写一个类似select count(column_name)的查询.这里count是一个函数.我想使用我自己的这样的功能.我尝试过不同的方法(使用PL / SQL函数之外的函数,在PL / SQL函数中)

这是我的PL / SQL函数部分.我试图在select语句中使用该函数.例如,我们可以从table_name中编写一个类似select count(column_name)的查询.这里count是一个函数.我想使用我自己的这样的功能.我尝试过不同的方法(使用PL / SQL函数之外的函数,在PL / SQL函数中).但它抛出一个错误PLS-00231:当在PL / SQL函数内部使用时,函数’GET_ANNUAL_COMP’可能不会在SQL中使用,并且当在PL / SQL函数之外使用时抛出ORA-00904无效标识符.

我正在使用oracle 11g.

declare
em_sal number(20);
em_comm employees.commission_pct%type; 
annual_salary number(10,4);

function get_annual_comp(sal in number,comm in number)
return number is
begin
return (sal*12 + comm*12);
end;
begin
select salary into em_sal from employees where employee_id=149;
select commission_pct into em_comm from employees where employee_id=149;

annual_salary := get_annual_comp(em_sal,em_comm);

dbms_output.put_line('total salary '|| annual_salary);

select get_annual_comp(salary,commission_pct) from employees where department_id=90;
end;
/

解决方法

在适当的模式(将运行匿名块的sames模式)中编译函数,如下所示:

CREATE OR REPLACE FUNCTION GET_ANNUAL_COMP(
    sal  IN NUMBER,comm IN NUMBER)
  RETURN NUMBER
IS
BEGIN
  RETURN (sal*12 + comm*12);
END;

使用与函数相同的模式,运行匿名块:

DECLARE
  em_sal NUMBER(20);
  em_comm employees.commission_pct%type;
  annual_salary NUMBER(10,4);
BEGIN
  SELECT salary INTO em_sal FROM employees WHERE employee_id=149;
  SELECT commission_pct INTO em_comm FROM employees WHERE employee_id=149;
  annual_salary := get_annual_comp(em_sal,em_comm);
  dbms_output.put_line('total salary '|| annual_salary);
  SELECT SUM(get_annual_comp(salary,commission_pct)) into annual_salary
  FROM employees
  WHERE department_id=90;
  dbms_output.put_line('department annual salary '|| annual_salary);
END;
/

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

推荐文章
热点阅读