【问题标题】:Oracle functions: How to pass a table name as parameter, and use a cursor result as a table name?Oracle函数:如何将表名作为参数传递,并使用游标结果作为表名?
【发布时间】: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;

【问题讨论】:

    标签: sql plsql oracle11g


    【解决方案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;
      

      【讨论】:

        猜你喜欢
        • 2016-10-24
        • 2015-07-09
        • 1970-01-01
        • 1970-01-01
        • 2017-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-24
        相关资源
        最近更新 更多