【问题标题】:How to reference an aliased column in an implicit cursor loop如何在隐式游标循环中引用别名列
【发布时间】:2017-05-04 13:17:27
【问题描述】:

我有以下 Oracle PL/SQL 隐式游标循环:

FOR c IN
(
  SELECT 1 AS "mycol",column2 FROM DUAL
  UNION ALL
  SELECT 2 AS "mycol",column2 FROM DUAL
)
LOOP
  DBMS_OUTPUT.PUT_LINE(c.mycol);
END LOOP;

当我运行时,我收到错误消息

PLS-00302;必须声明组件“mycol”。

如何在我的隐式游标循环中访问这个显式插入的列“mycol”?

【问题讨论】:

  • DBMS_OUTPUT.PUT_LINE(c."mycol");
  • 默认情况下,oracle 上的所有名称都大写。 c.mycol 相当于 c."MYCOL" 而不是 "mycol"

标签: oracle plsql


【解决方案1】:

“如何在隐式游标循环中访问这个显式插入的列 'mycol'?”

不是mycol,而是"mycol"。您用双引号标记它,使其区分大小写。所以要么改变你的参考......

DBMS_OUTPUT.PUT_LINE(c."mycol");

...或者,更好的是,更改列别名:

SELECT 1 AS mycol,  column2 FROM DUAL

双引号标识符很棘手:如果我们在命名对象时使用它们,我们必须小心使用双引号,此后的大小写完全相同。一个例外是标识符全部为大写。然后双引号是可选的。 "MYCOL"MYCOL 是等价的,mycol 也是如此。

最好的办法是避免使用双引号,除非您有迫切的理由这样做。

【讨论】:

猜你喜欢
  • 2012-11-05
  • 1970-01-01
  • 1970-01-01
  • 2022-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-17
  • 2010-09-09
相关资源
最近更新 更多