【发布时间】:2014-08-22 10:27:34
【问题描述】:
我搜索了一些示例,说明如何使用立即执行从 select 语句中返回值,但它一直向我返回错误“ORA-00903: invalid table name”。
以下是代码示例:
DECLARE
LAST_NUMBER NUMBER;
CURSOR C_SEQUENCES IS
SELECT
A.SEQUENCE_NAME, B.TABLE_NAME, C.COLUMN_NAME
FROM
USER_SEQUENCES A
INNER JOIN
USER_CONSTRAINTS B ON A.SEQUENCE_NAME = REPLACE(B.CONSTRAINT_NAME, 'PK', 'SEQ_ID')
INNER JOIN
USER_CONS_COLUMNS C ON B.CONSTRAINT_NAME = C.CONSTRAINT_NAME
WHERE
B.CONSTRAINT_TYPE = 'P';
BEGIN
FOR REG IN C_SEQUENCES LOOP
EXECUTE IMMEDIATE 'SELECT MAX(:1) FROM :2' INTO LAST_NUMBER USING REG.COLUMN_NAME, REG.TABLE_NAME;
END LOOP;
END;
是的,该表确实存在。
有什么想法吗?
【问题讨论】:
-
很遗憾,表名不能是绑定变量!您需要将其包含在字符串结构本身中!
-
谢谢@MaheswaranRavisankar,我不知道我怎么会忘记尝试这个。 =)