如何在过程oracle中将表名设置为参数
Posted
技术标签:
【中文标题】如何在过程oracle中将表名设置为参数【英文标题】:how to set table name as parameter in procedure oracle 【发布时间】:2014-07-23 23:07:40 【问题描述】:我在 Oracle 中有一个过程,它返回所有回答 SQL 语句的行。 该程序得到4个参数,其中3个使用在-所说的SQL语句中。往下看(代码)。 只有参数:in_table_name 会报错,如何通过过程将table_name 移动到SQL 语句中?(我试过用“&”,但是不行)
create or replace Procedure return_rows_EMPLOYEE (in_order in number,
in_sorting in VARCHAR2, in_job in VARCHAR2, in_table_name in VARCHAR2, out_cursor OUT SYS_REFCURSOR) As
Begin
if in_order = 1 THEN
OPEN out_cursor for
select * from &in_table_name
WHERE EMPL_JOB_TITLE = in_job
ORDER BY in_sorting ASC;
else
OPEN out_cursor for
select * from &in_table_name
WHERE EMPL_JOB_TITLE = in_job
ORDER BY in_sorting DESC;
END if;
End;
【问题讨论】:
使用动态查询。你不能使用表名作为参数。 【参考方案1】:正如 Rahul 指出的,您不能使用表名作为参数。但我还要补充一点,您不能在EXECUTE IMMEDIATE
子句中使用表名作为USING
参数。您必须在查询中实际连接它。下面是(未经测试!)结果查询。
create or replace Procedure return_rows_EMPLOYEE (in_order in number,
in_sorting in VARCHAR2, in_job in VARCHAR2, in_table_name in VARCHAR2, out_cursor OUT SYS_REFCURSOR)
As
query varchar2(4000);
Begin
if in_order = 1 THEN
query :=
'select * from ' || in_table_name ||
' WHERE EMPL_JOB_TITLE = :1
ORDER BY :2 ASC';
else
OPEN out_cursor for
query :=
'select * from ' || in_table_name ||
' WHERE EMPL_JOB_TITLE = :1
ORDER BY :2 DESC';
end if;
open out_cursor for query using in_job, in_sorting;
End;
【讨论】:
以上是关于如何在过程oracle中将表名设置为参数的主要内容,如果未能解决你的问题,请参考以下文章