創建Oracle視圖時,我有下面的語句。該聲明將返回一個特定值作爲MYVALUE
列。創建表時Oracle查詢子查詢失敗
(SELECT myval
FROM (SELECT myval
FROM mytable
WHERE primary_key = /*CS.primary_key*/ 12345
ORDER BY table_primary_key ASC)
WHERE ROWNUM < 2) AS MYVALUE,
內部查詢可以返回多個行。我只對第一條記錄感興趣,它必須按table_primary_key
排序,因此使用子查詢來允許選擇ROWNUM
。
當我創建上面在其當前狀態的查詢時,視圖創建成功。當我取消CS.primary_key
並刪除硬編碼12345
,該視圖創建失敗,沒有爲什麼
(2.1的SQLDeveloper)介紹:「失敗:警告:執行有警告完成」。
而且,只是爲了嘗試和縮小問題,我刪除了ORDER BY
,並ROWNUM
如下,和同樣的錯誤發生
(SELECT myval
FROM (SELECT myval
FROM mytable
WHERE primary_key = CS.primary_key)
) AS MYVALUE,
最後,我知道CS.primary_key
是一個有效的參考,如我在沒有問題的情況下在我的觀點的其他部分使用。
任何想法,爲什麼引用是有效的,或者如何獲得更詳細的錯誤信息?
編輯:更新開始打開括號
編輯2:感謝迄今的迴應。這裏是問題的總結,我認爲CS.PRIMARY鍵應該在範圍內,因爲我在查詢中的其他地方使用它。下面的代碼工作,但如果我代替硬編碼爲1〜CS.primary_key,它失敗:
drop view myview;
drop table mytable;
drop table mytable_parent;
drop table proof_table;
-- ISSUE TABLES
create table mytable_parent (primary_key number primary key);
create table mytable (primary_key number, myval varchar(255), parent_primary_key number);
insert into mytable_parent values (1);
insert into mytable_parent values (2);
insert into mytable values (1, 'myval1-1', 1);
insert into mytable values (2, 'myval1-2', 1);
insert into mytable values (3, 'myval2-1', 2);
-- EXAMPLE TABLE TO PROVE CS.* WORKS
create table proof_table (primary_key number primary key, parent_primary_key number, any_old_value varchar(255));
insert into proof_table values (1, 1, 'proofval1-1');
insert into proof_table values (2, 2, 'proofval1-2');
-- VIEW
CREATE OR REPLACE FORCE VIEW myview AS
SELECT
-- PROOF STATEMENT USING CS.primary_key SUCCESSFULLY
(SELECT any_old_value FROM proof_table WHERE parent_primary_key IN
(SELECT primary_key FROM proof_table WHERE parent_primary_key =
-- USING CS REFERENCE, NO PROBLEM
CS.primary_key)
) AS PROOF_VALUE,
-- PROBLEM STATEMENT
(SELECT myval FROM (SELECT myval FROM mytable
WHERE parent_primary_key = /*CS.primary_key*/ 1
ORDER BY primary_key ASC)
WHERE ROWNUM < 2) AS MYVALUE
-- DEFINE CS
FROM mytable_parent CS;
你的SQL語句和逗號的括號中有奇數個括號,它們不應該是等等。你可以發佈你正在運行的所有代碼來生成你的視圖嗎?這將有助於確定您的參考範圍等。 – Ollie 2011-12-21 11:21:56
什麼是CS.primary_key?它從何而來? – 2011-12-21 11:34:15
你可以顯示整個查詢,這只是一個片段? – MatBailie 2011-12-21 12:02:12