Oracle函数:如何将表名作为参数传递并使用游标结果作为表名?

4
我需要帮助创建一个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;
2个回答

4

替换

SELECT MAX(curResult) AS MaxID
FROM tableName;

使用

execute immediate 
  'select max(' || curResult || ')' ||
  '  from ' || tableName 
  into MaxID;

每当你想在select语句中动态更改表格或列名时,几乎总是必须使用execute immediate语句。


0

你需要使用动态SQL。类似于:

EXECUTE IMMEDIATE 'SELECT MAX(' || tablename || '_id ) ' ||
                  '  FROM ' || tablename
   INTO maxID;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接