为什么我的SELECT语句没有设置我的COLUMN NEW_VALUE?

时间:2012-06-29 17:07:33

标签: oracle sqlplus execute-immediate

我有以下SQL * Plus代码:

COLUMN x NEW_VALUE x2
BEGIN
   -- ...
   EXECUTE IMMEDIATE 'SELECT ''a'' x FROM dual';
   EXECUTE IMMEDIATE 'SELECT colname x FROM some_table WHERE (some_condition)';
   -- ...
END;

此时,& x2仍然为空,并且colname为NOT NULL。为什么不设置,如果没有其他的话'a'?

2 个答案:

答案 0 :(得分:2)

COLUMN是SQL * Plus客户端构造,动态SQL在PL / SQL引擎内运行,因此没有真正的连接。我不确定你在哪里记录不适用的东西。

我能想到的最接近这个 - 假设你这样做是为了让你的动态SQL的结果可用于稍后在脚本中规划SQL语句 - 而是使用绑定变量:

var x varchar2(30);

BEGIN
    EXECUTE IMMEDIATE 'SELECT ''a'' x FROM dual' INTO :x;
END;
/

select :x from dual;

您可以在使用:x的任何地方使用&x2,但请记住,因为它是绑定变量,所以您不需要将其放在单引号中(如果它是varchar)当你使用它;如果你这样做:

select ':x' from dual;

...然后你会回到文字字符串:x,而不是a

已编辑添加

如果您特别需要&表单,则可以采取进一步措施(未经测试,但看不出原因):

column x2 new_value x3
select :x as x2 from dual;

......您将&x3可用。

答案 1 :(得分:0)

在网上经过数小时的测试和搜索(毫无结果),这是我能想到的最好的结果:EXECUTE IMMEDIATE在自己的泡泡世界中运行,至少在COLUMN支持下运行被关注到。它甚至没有看到它,也不管你做什么都不会。不知道为什么会这样,或者为什么没有在任何地方记录(至少我能找到)。