使尽可能简单,而不是创建几个函数,例如:
get_emp_name( 123 );
get_emp_age( 123 );
...
我想创建一个plsql函数,我可以指定要过滤的列,如下所示:
get_emp(employee.column_name, employee.ID )
例子:
get_emp(employee.name,123); -- it will return 'John'
get_emp(employee.age,123): -- it will return 40
这将使我可以轻松地创建一个函数,该函数将返回选择的任何列,但是我无法在plsql oracle中创建它,所以你们可以帮助我创建它,非常感谢。
这并不是您想要的,但是创建函数返回记录可能会更好
function get_emp(p_employee_id in employee.id%type) return employee%rowtype is
l_emp employee%rowtype ;
begin
select e.* into l_emp
from employee e
where e.id = p_employee_id;
return l_emp;
end;
然后,您可以通过以下方式获取特定字段:
get_emp(123).name
get_emp(123).age
这是一个工作示例:
SQL> create table employee (id number primary key, name varchar2(30), age number);
Table created.
SQL> insert into employee values (1, 'Smith', 28);
1 row created.
SQL> insert into employee values (2, 'Jones', 30);
1 row created.
SQL> insert into employee values (3, 'Brown', 34);
1 row created.
SQL> create function get_emp(p_employee_id in employee.id%type) return employee%rowty
2 l_emp employee%rowtype ;
3 begin
4 select e.* into l_emp
5 from employee e
6 where e.id = p_employee_id;
7
8 return l_emp;
9 end;
10 /
Function created.
SQL> begin
2 dbms_output.put_line('Name = ' || get_emp(1).name);
3 dbms_output.put_line('Age = ' || get_emp(1).age);
4 end;
5 /
Name = Smith
Age = 28
当然,最后一个PL / SQL块不是很有效,因为它两次调用了函数(并因此调用了查询)。更有效的版本是:
declare
l_emp employee%rowtype;
begin
l_emp := get_emp(1);
dbms_output.put_line('Name = ' || l_emp.name);
dbms_output.put_line('Age = ' || l_emp.age);
end;
/
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句