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

kri*_*993 0 sql oracle plsql

代码如下:

cursor c1 is
select x, y, a.z, b.z "a1" from t3 a, t4 b;
Run Code Online (Sandbox Code Playgroud)

以下从c1获取数据为

insert into t1 (x, y, z, z1) values (c1.x, c1.y, c1.z, c1.a1);
Run Code Online (Sandbox Code Playgroud)

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

Jus*_*ave 5

标识符放在双引号中时,它将成为区分大小写的标识符.你需要用双引号括起来并用正确的套管进行引用.

insert into t1 (x, y, z, z1) 
  values (c1.x, c1.y, c1.z, c1."a1");
Run Code Online (Sandbox Code Playgroud)

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

cursor c1 is
  select x, y, a.z, b.z a1
    from t3 a, t4 b;
Run Code Online (Sandbox Code Playgroud)

顺便说一下,你是否真的试图在t3和之间生成笛卡尔积t4?这通常是一个非常糟糕的主意......

  • @ krishb591993 - 您发布的代码在两个表之间生成笛卡尔积.如果这不是你想要的,我会认真看看代码,以弄清楚连接条件应该是什么.如果你打算创建一个笛卡尔积,我至少会使用一个"交叉连接"运算符向下一个人说明这是故意的,而不是(更常见的)某人意外地破坏连接的情况. (3认同)