【问题标题】:PLSQL SELECT INTO FROM parameterPLSQL SELECT INTO FROM 参数
【发布时间】:2014-05-30 00:43:18
【问题描述】:

我创建了一个函数,它应该从表(参数)返回最大 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;

【问题讨论】:

  • P_Table 是一个变量,而不是表名。如果您需要使用动态 SQL,请阅读 EXECUTE IMMEDIATE 语句。
  • 你搞定了吗?

标签: sql plsql


【解决方案1】:

如前所述,您需要使用动态 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;

【讨论】:

    猜你喜欢
    • 2016-01-11
    • 1970-01-01
    • 2022-08-02
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多