2009-08-24 62 views
5

我有以下代碼:ORA-00933:SQL命令不能正確地結束

begin 
for i in 1..2 loop 
insert into dba_xy.despatch 
select desp_id_seq.nextval, 
     dbms_random.string('U',5), 
     trunc(dbms_random.value(0000,9999)), 
     prod_id from dba_xy.product 
       prod_name from dba_xy.product;   
end loop; 

末;

當運行它時,oracle給我的以下錯誤消息:

prod_name from dba_xy.product; 
         * 

ERROR位於第8行: ORA-06550:行8,列29: PL/SQL:ORA-00933:SQL命令無法正常結束 ORA-06550:第3行,第2列: PL/SQL:SQL語句忽略

我試圖做的是插入到發貨表的新數據鏈接的現存PROD_ID和PROD_NAME。我已將prod_name設置爲產品表中的唯一鍵,並將prod_id設置爲主鍵,並在發送表中將其設置爲外鍵約束。我需要將prod_name包含在發送表中,以使表的讀者能夠更好地理解prod_name需要被發現的內容等等,而不僅僅是給出prod_id,這對他們根本沒有任何意義。但是也許我在考慮在發貨表中不需要prod_id。 請幫忙。

從發貨表丟棄PROD_ID列後,我改變了我的代碼:

begin 
for i in 1..2 loop 
insert into dba_xy.despatch 
select desp_id_seq.nextval, 
     dbms_random.string('U',5), 
     trunc(dbms_random.value(0000,9999)), 
       prod_name from dba_xy.product;   
end loop; 

末; /

和以下錯誤消息上來關於唯一約束: ORA-00001:: 位於第1行開始 * ERROR唯一約束(DBA_XY.PROD_NAME_UC)違反 ORA-06512:在3線

回答

0

您是否因爲插入相同的行兩次而獲得唯一的約束違規? 「我」應該在插入語句的where子句中使用,還是您真的想要兩次插入行?

你的第一條語句有兩個FROM子句,這就是爲什麼你得到一個語法錯誤。

select desp_id_seq.nextval, 
      dbms_random.string('U',5), 
      trunc(dbms_random.value(0000,9999)), 
      prod_id, --from dba_xy.product 
       prod_name from dba_xy.product;  
3

您的ORA-00933錯誤是由於格式不正確的SELECT語句:

SELECT desp_id_seq.nextval, 
     dbms_random.string('U',5), 
     TRUNC(dbms_random.value(0000,9999)), 
     prod_id from dba_xy.product 
     prod_name from dba_xy.product; 

...當它應該是:

SELECT DESP_ID_SEQ.nextval, 
     DBMS_RANDOM.string('U',5), 
     TRUNC(DBMS_RANDOM.value(0000,9999)), 
     t.prod_id, 
     t.prod_name 
    FROM dba_xy.product t; 

你失蹤的逗號分隔prod_idprod_name列,並且在錯誤的位置還有一個冗餘的FROM dba_xy.product聲明。

這就是說,dba_xy.despatch表應該只包含PROD_ID。如果您需要提供可讀的數據版本,我建議您構建一個view。例如:

CREATE VIEW despatch_vw AS 
SELECT t.prod_id, 
     p.prod_name 
    FROM dba_xy.despatch t 
    JOIN dba_xy.product p ON p.prod_id = t.prod_id 
+0

我試着運行你的視圖代碼,它想出了以下錯誤: join dba_xy。產品p * 錯誤在第5行: ORA-00905:缺少關鍵字 – taksIV 2009-08-24 03:23:26

+0

我不好 - 我忘了實際的JOIN標準。立即嘗試查看代碼。 – 2009-08-24 04:45:46

+0

哈哈,這很好。謝謝。 – taksIV 2009-08-24 05:30:03

相關問題