2013-08-05 31 views
0

我試圖通過在指定的表空間tbspUser1上連接4個表來創建單個表。通過在指定的表空間上連接多個表來創建單個表

我用下面的語句:

CREATE TABLE SingleTable AS(
SELECT customer.c_id AS Customer_ID, 
customer.c_uname AS CUSTOMER_UName, 
ORDERS.o_id AS Order_ID, 
ORDER_LINE.ol_i_id As Order_Item_ID, 
ITEM.I_TITLE AS Item_Title 
FROM customer INNER JOIN orders ON customer.C_ID=orders.O_C_ID 
INNER JOIN order_line ON orders.o_id=order_line.ol_o_id 
INNER JOIN item ON order_line.ol_i_id=item.i_id) TABLESPACE tbspUser1; 

我得到了錯誤:

Error starting at line 1 in command: 
CREATE TABLE SingleTable AS(
SELECT customer.c_id AS Customer_ID, 
customer.c_uname AS CUSTOMER_UName, 
ORDERS.o_id AS Order_ID, 
ORDER_LINE.ol_i_id As Order_Item_ID, 
ITEM.I_TITLE AS Item_Title 
FROM customer INNER JOIN orders ON customer.C_ID=orders.O_C_ID 
INNER JOIN order_line ON orders.o_id=order_line.ol_o_id 
INNER JOIN item ON order_line.ol_i_id=item.i_id) TABLESPACE tbspUser1 
Error at Command Line:9 Column:50 
Error report: 
SQL Error: ORA-00933: SQL command not properly ended 
00933. 00000 - "SQL command not properly ended" 
*Cause:  
*Action: 

我一直在調試和檢查有什麼不對我的代碼和運行在它自己的我的select語句:

SELECT customer.c_id AS Customer_ID, 
customer.c_uname AS CUSTOMER_UName, 
ORDERS.o_id AS Order_ID, 
ORDER_LINE.ol_i_id As Order_Item_ID, 
ITEM.I_TITLE AS Item_Title 
FROM customer INNER JOIN orders ON customer.C_ID=orders.O_C_ID 
INNER JOIN order_line ON orders.o_id=order_line.ol_o_id 
INNER JOIN item ON order_line.ol_i_id=item.i_id; 

它以下列字段返回記錄沒有錯誤:

CUSTOMER_ID CUSTOMER_UNAME   ORDER_ID ORDER_ITEM_ID ITEM_TITLE             
----------- -------------------- ---------- ------------- ------------------------------------------------------------ 

我將不勝感激,如果有人能指導我什麼是對分配表語句將4個表錯了我創建一個表..

謝謝!

回答

0

這與加入無關。該錯誤消息指向第9行第50列,這是關鍵字TABLESPACE的開頭,而不是查詢的一部分。你TABLESPACE子句是放錯了地方:

CREATE TABLE SingleTable 
TABLESPACE tbspUser1 
AS 
SELECT customer.c_id AS Customer_ID, 
customer.c_uname AS CUSTOMER_UName, 
ORDERS.o_id AS Order_ID, 
ORDER_LINE.ol_i_id As Order_Item_ID, 
ITEM.I_TITLE AS Item_Title 
FROM customer INNER JOIN orders ON customer.C_ID=orders.O_C_ID 
INNER JOIN order_line ON orders.o_id=order_line.ol_o_id 
INNER JOIN item ON order_line.ol_i_id=item.i_id; 

documentation for create table是相當複雜的,但對於relational tables的部分顯示physical properties - 包括segment attributes,其中包括TABLESPACE條款 - 其中包括AS subquery - 在table properties之前來條款。這是聲明的最後部分。

雖然創建一個包含其他四個數據的表似乎很奇怪,這聽起來像是你想要一個視圖或一個物化視圖,否則對原始四個表格的更改將不會反映在singletable中。

+0

對於修正Tablespace子句感謝了很多!它正在工作。 :)我之所以創建關係表,是因爲我試圖獲得最小的非規格化表,以從4個表中選擇列...但是,我仍然無法獲得最小的非規格化表..任何建議?任何我錯過了或添加太多的東西? :/ –

+0

@AmAnDanG - 我不確定我明白你的意思。非規格化總是會佔用額外的空間並且會成爲維護問題(除非你有MV)。如果你需要這些領域,那麼我不會看到它如何變小 - 不像你可以得到不同的價值。 –