【发布时间】:2021-08-19 00:32:42
【问题描述】:
我尝试编写一个 PL/SQL 函数,其参数为表名和列名,它以表的形式返回查询结果。 这是我尝试过的:
CREATE TYPE TABLE_RES_OBJ AS OBJECT (
employee_id number(30) ,
person_id number(30),
joined_year number(4),
salary number(20,2),
qualification varchar2(45),
department varchar2(45)
);
/
create TYPE table_ret as TABLE OF table_res_obj;
/
create or replace function select_custom(p_tablename varchar2, p_colname varchar2 ) return table_ret
is
ret table_ret;
query_txt varchar2(100) := 'SELECT :a from :b';
begin
execute immediate query_txt bulk collect into ret using p_colname, p_tablename;
return ret;
end select_custom;
如您所见,这并不像想要的那样通用,但仍然无法正常工作,它说该表不存在,即使我尝试使用现有表运行它也是如此。
【问题讨论】:
-
如果表和列是基于参数的,你怎么知道结果有总是
TABLE_RES_OBJ的结构? -
(与直接使用视图或表格相比,您认为有什么优势?)
标签: oracle plsql binding dynamic-sql