我正在尝试创建这个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;
答案 0 :(得分:2)
替换
SELECT MAX(curResult) AS MaxID
FROM tableName;
与
execute immediate
'select max(' || curResult || ')' ||
' from ' || tableName
into MaxID;
每当您想要在select语句中动态更改表名或列名时,除了诉诸execute immediate
语句之外几乎总是没有别的办法。
答案 1 :(得分:0)
您需要使用动态SQL。像
这样的东西EXECUTE IMMEDIATE 'SELECT MAX(' || tablename || '_id ) ' ||
' FROM ' || tablename
INTO maxID;