首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PL/SQL动态循环值

问PL/SQL动态循环值
EN

Stack Overflow用户
提问于 2013-03-07 22:15:28
回答 2查看 1.5K关注 0票数 0

我的目标是保留一个包含绑定值和参数的表,这些值和参数稍后将被dbms_sql使用。下面的pl/sql示例是基本的,它的目的是说明我从以前的循环对象中回忆值时遇到的问题。

表account_table保存记帐信息。

代码语言:javascript
复制
CREATE TABLE account_table (account number, name varchar2(100)));

INSERT INTO mytest 
    (account, name) 
VALUES 
    (1 ,'Test');
COMMIT;

表MYTEST保存绑定信息

代码语言:javascript
复制
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的值看起来很好(它将读为“Selecti.account from dual"),但是在 i.account 上会出现无效标识符的例外情况。有什么方法可以得到对象的值吗?我们使用的是Oracle 11g2。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-07 22:28:09

动态SQL将不具有PL/SQL块的上下文。不能使用在动态SQL语句中在PL/SQL块中定义的标识符。因此,不能引用i.account并引用在动态SQL语句之外定义的循环。当然,您可以动态地生成整个PL/SQL块,但是动态PL/SQL通常是一种非常糟糕的方法--很难正确处理这类事情。

但是,如果您试图使用i.account的值,则可以执行以下操作

代码语言:javascript
复制
v_sql := 'SELECT :1 FROM dual';
EXECUTE IMMEDIATE v_sql
   INTO v_ret
  USING i.account;

但是,如果您想从表中获取字符串i.account,这似乎对您没有任何帮助。

票数 1
EN

Stack Overflow用户

发布于 2013-03-08 06:59:29

您是否总是尝试使用相同的where子句访问同一个表,但每次只查找不同的列?如果是这样,你可以这样做:

代码语言:javascript
复制
p_what_I_want := 'ACCOUNT';
--
SELECT decode(p_what_I_want
               ,'ACCOUNT', i.account
               , 'OTHER_THING_1', i.other_thing_1
               , 'OTHER_THING_2', i.other_thing_2
               , 'OTHER_THING_1', i.default_thing) out_thing
INTO l_thing
FROM table;

上面的语句不是动态的,而是根据需要返回不同的列.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15282817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档