私の目標は、後で 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 を使用しています。ありがとう!