PLSQL SELECT INTO FROM参数

时间:2014-05-29 16:08:16

标签: sql plsql

我创建了一个应该从表(参数)返回最大id的函数

CREATE OR REPLACE FUNCTION getmaxid
(
P_TABLE IN VARCHAR2
)
RETURN NUMBER IS
v_maxId NUMBER(38);

BEGIN

SELECT MAX(id) INTO v_maxId FROM P_TABLE;

RETURN v_maxId;

END getmaxid 

但是,我在这一行上不断收到错误消息“ ORA-00942:表格或视图不存在”:

SELECT MAX(id) INTO v_maxId FROM P_TABLE;

1 个答案:

答案 0 :(得分:3)

如前所述,您需要使用动态SQL来执行操作。在这种情况下,p_table是一个变量。解决方案是构建一个包含SQL的字符串,并在构建查询时动态执行它。

下面的示例使用DUAL,但表名是任意的。

这是你正在寻找的东西,把这个功能带到了街区之外,我把它留下来这样就可以测试它了..

DECLARE
   FUNCTION getmaxid (p_table IN VARCHAR2)
      RETURN NUMBER
   IS
      v_maxid    NUMBER (38);
      v_select   VARCHAR2 (200);
      cnt        SYS_REFCURSOR;
   BEGIN
      v_select := 'SELECT COUNT(*) FROM ' || p_table;

      DBMS_OUTPUT.put_line (v_select);

      EXECUTE IMMEDIATE v_select INTO v_maxid;

      RETURN v_maxid;
   END getmaxid;
BEGIN
   DBMS_OUTPUT.put_line (getmaxid ('DUAL'));
END;