我的目标是保留一个包含绑定值和参数的表,稍后将由 dbms_sql 使用。下面的 pl/sql 示例是基本的,其目的是说明我在从先前的循环对象中调用值时遇到的问题。
表account_table保存账户信息
CREATE TABLE account_table (account number, name varchar2(100)));
INSERT INTO mytest
(account, name)
VALUES
(1 ,'Test');
COMMIT;
表MYTEST保存绑定信息
CREATE TABLE mytest (bind_value varchar2(100));
INSERT INTO mytest (bind_value) VALUES ('i.account');
COMMIT;
DECLARE
v_sql VARCHAR2(4000) := NULL;
v_ret VARCHAR2(4000) := NULL;
BEGIN
FOR I IN (
SELECT account
FROM account_table
WHERE ROWNUM = 1
) LOOP
FOR REC IN (
SELECT *
FROM mytest
) LOOP
v_sql := 'SELECT ' || rec.bind_value || ' FROM dual';
EXECUTE IMMEDIATE v_sql INTO v_ret;
dbms_output.put_line ('Account: ' || v_ret);
END LOOP;
END LOOP;
END;
/
我无法存储名称i.account并稍后使用该对象的值。我的想法是使用 NDS;但是,虽然v_sql的值看起来没问题(它会显示“Select i.account from dual”),但i.account会引发无效标识符的异常。有没有办法获取对象的值?我们正在使用 Oracle 11g2。谢谢!