gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 07:03:43 24 4
gpt4 key购买 nike

这是我的 PL/SQL 函数部分。我正在尝试在 select 语句中使用该函数。例如,我们可以编写一个类似 select count(column_name) from table_name 的查询。这里count是一个函数。我想像这样使用我自己的功能。我尝试了不同的方法(使用 PL/SQL 函数外部的函数、PL/SQL 函数内部的函数)。但在 PL/SQL 函数内部使用时,它会抛出错误 PLS-00231:function 'GET_ANNUAL_COMP' may not be use in SQL ,并在使用时抛出 ORA-00904 invalididentifier PL/SQL 函数之外。

我使用的是 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;
/

最佳答案

在适当的架构中编译该函数(与将运行匿名 block 的架构相同),如下所示:

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

使用与函数相同的架构,运行匿名 block :

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;
/

关于oracle - 在 ORACLE 中的 select 语句中从 PL/SQL 调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25384984/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com