想要从游标查询中获取别名的值

时间:2016-09-14 07:37:54

标签: sql oracle plsql

代码如下:

cursor c1 is
select x, y, a.z, b.z "a1" from t3 a, t4 b;

以下从c1获取数据为

insert into t1 (x, y, z, z1) values (c1.x, c1.y, c1.z, c1.a1);

编译后,由于未声明组件a1,因此出现错误。和列不允许在这里。 PLSQL的新功能,因为我并不认为需要声明别名。

2 个答案:

答案 0 :(得分:5)

当您放置identifier in double-quotes时,它将成为区分大小写的标识符。你需要用双引号括起来并用正确的套管进行引用。

insert into t1 (x, y, z, z1) 
  values (c1.x, c1.y, c1.z, c1."a1");

应该有效。但是,首先创建区分大小写的标识符通常是一个非常糟糕的主意。每次要引用列名时必须输入一堆双引号是非常烦人的。并且有一些标识符区分大小写,而其他一些不区分大小写会驱动任何必须支持您的代码的人绝对是蹩脚的。使用正常的不区分大小写的别名

会更有意义
cursor c1 is
  select x, y, a.z, b.z a1
    from t3 a, t4 b;

顺便说一句,您是否真的想在t3t4之间生成笛卡尔积?这通常是个坏主意...

答案 1 :(得分:0)

你的问题不是那么明确;如果您需要将数据从表复制到另一个表,您只需使用:

insert into t1 (x,y,z,z1) select x,y,a.z,b.z "a1" from t3 a, t4 b;
相关问题