Oracle函数:如何将表名作为参数传递,并使用游标结果作为表名?
Posted
技术标签:
【中文标题】Oracle函数:如何将表名作为参数传递,并使用游标结果作为表名?【英文标题】:Oracle functions: How to pass a table name as parameter, and use a cursor result as a table name? 【发布时间】:2014-04-03 19:29:18 【问题描述】:我在尝试创建的这个 oracle 函数方面需要帮助。 基本上我想要做的是传入一个表的名称,并返回该列的最大值,即变量表名+'_ID' 所以它看起来像这样 (tableName)_ID
这是我尝试过的(但我什至无法让它工作):
CREATE OR REPLACE FUNCTION RETURN_ID(tableName IN varchar2)
return int
IS
curResult varchar2;
cursor cur1 is
SELECT column_name
FROM all_tab_cols
WHERE table_name = tableName
AND column_name like '%_ID';
BEGIN
OPEN cur1;
FETCH cur1 INTO curResult;
CLOSE cur1;
SELECT MAX(curResult) AS MaxID
FROM tableName;
RETURN maxID;
END RETURN_ID;
【问题讨论】:
【参考方案1】:替换
SELECT MAX(curResult) AS MaxID
FROM tableName;
与
execute immediate
'select max(' || curResult || ')' ||
' from ' || tableName
into MaxID;
每当您想在 select 语句中动态更改表名或列名时,几乎总是没有其他办法,只能诉诸 execute immediate
语句。
【讨论】:
【参考方案2】:您需要使用动态 SQL。类似的东西
EXECUTE IMMEDIATE 'SELECT MAX(' || tablename || '_id ) ' ||
' FROM ' || tablename
INTO maxID;
【讨论】:
以上是关于Oracle函数:如何将表名作为参数传递,并使用游标结果作为表名?的主要内容,如果未能解决你的问题,请参考以下文章
通过将表名作为参数传递,使用 oracle 中的存储过程从表中搜索数据