2014-10-01 86 views
3

我對SQL語言非常陌生,並試圖執行以下代碼。它給了我一個錯誤信息在下面..我做錯了什麼?SQL插入語句 - 缺少select關鍵字

錯誤消息:

ORA-00928: missing SELECT keyword 
00928. 00000 - "missing SELECT keyword" 

代碼:

WITH ABC(one,two,three) 
AS(
    select 25, 15,23 from dual 
) 
INSERT INTO ABC(one, two, three) VALUES (10,11,12) 
select * from ABC; 

非常感謝你提前!

編輯 - 解釋
我需要創建超過100行的表。由於權限足夠,我不允許創建新表,所以我正在嘗試創建虛擬表。我頭上的想法是用For循環將行插入到虛擬表中。但是,當我嘗試插入任何記錄出現這種「缺少選擇關鍵字」錯誤...

編輯 - 關於詞「非常非常新的SQL語言」
我目前是計算機工程專業的學生在大學,去年學習了「數據庫」課程。現在,我正在實習。所以像..我不喜歡誰需要w3school教程初學者,但我是新來的

+2

您究竟在做什麼? – Siyual 2014-10-01 18:47:50

+0

分號在插入行的末尾? – Steve 2014-10-01 18:48:13

+0

非常新的SQL和從公用表表達式開始? Sheesh祝你好運! :P – Kritner 2014-10-01 18:49:07

回答

2

你需要返回所需的行數又一個「表」。在Oracle這是使用connect by運營商的無證功能通常做:

select level as rn 
from dual 
connect by level <= 100 

的「無證」的一部分的事實是,沒有真正的「連接」完成後,沒有start with供應。查看手冊中的connect by以獲取更多詳細信息。

將返回100行。您可以將此與初始CTE相結合,並進行交叉連接以返回單行100次:

WITH abc (one,two,three) AS (
    select 25, 15,23 from dual 
), num_rows as (
    select level as rn 
    from dual 
    connect by level <= 100 
) 
select abc.* 
from abc 
    cross join num_rows; 
+0

這完全是我想要的!謝謝! – Adrian 2014-10-02 20:05:00

0

「現實生活中的SQL語言」這將創建一個表

SELECT (21)as a,(22)as b,(23)as c 
INTO #Test 
SELECT * FROM #Test 

這將創建一個表,以及。

SELECT * 
INTO #TestTable 
FROM dual 

假設dual是數據庫中的有效表。

+0

謝謝你的答案,但問題是編輯。「我需要創建(虛擬)超過100行的表」 – Adrian 2014-10-01 18:58:16

+0

@Adrian我認爲你的意思是臨時表,這應該引導你在你的谷歌任務 – 2014-10-01 19:00:22

+1

這對Oracle無效 – 2014-10-02 07:23:33

1

你爲什麼不嘗試union all這樣的:

WITH ABC(one,two,three) 
AS(
    select 25, 15,23 from dual union all 
    select 10,11,12 from dual 
) 
select * from ABC 
+0

謝謝你的回答:)但是,100次....? – Adrian 2014-10-01 19:40:35

+0

單調乏味的權利?但是如果你填寫你的表格插入值,我認爲這是唯一的方法。另一種方式是通過查詢填充它,但我認爲這不是你的情況 – Aramillo 2014-10-01 20:17:04

+0

如果你使用Excel來生成表達式,這並不是很乏味。無論如何,你的100個數據值都來自哪裏?他們是隨機的價值​​還是他們坐在一個Excel表中的某個地方? – 2014-10-02 07:46:25