2016-09-14 57 views
0

代碼取別名的值如下:想從遊標查詢

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的新手,因爲我不認爲需要聲明別名。

回答

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之間的笛卡爾積?這通常是一個非常糟糕的主意......

+0

謝謝你的答案賈斯汀。有效。我會選擇不區分大小寫的東西,並且順便學習一些新東西。但是,我不想在t3和t4之間生成笛卡爾積。代碼已經寫入,生成的數據對其他操作很有用。 – krishb591993

+3

@ krishb591993 - 您發佈的代碼在兩個表格之間生成笛卡爾積。如果這不是你想要的,我會認真看待代碼,以確定連接條件應該是什麼。如果您打算創建笛卡爾產品,那麼我至少會使用「交叉連接」操作符向下一個人說明這是有意的,而不是偶然地玷污了連接的(更常見的)情況。 –

0

你的問題不太清楚;如果您需要將數據從一個表複製到另一個,你可以簡單地使用:

insert into t1 (x,y,z,z1) select x,y,a.z,b.z "a1" from t3 a, t4 b; 
+0

我不能這樣做,因爲它的代碼很大,我需要先在第一個查詢中檢索數據,然後將其插入表中。我的問題在於使用別名。 – krishb591993