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