2017-05-08 23 views
2

我創建了一個選擇Oracle SQL Developer中ORA-00918:列在Java中定義的含糊,SQL開發工作

select PRZYJECIE_NA_ODDZIAL.PRZYJECIEID as Numer_przyjęcia, 
     PRZYJECIE_NA_ODDZIAL.PACJENTID as ID_pacjęta, 
     PACJENT.PACJENTIMIE as Imię, 
     PACJENT.PACJENTNAZWISKO as Nazwisko, 
     PACJENT.PESEL as PESEL, 
     PRZYJECIE_NA_ODDZIAL.ROZPOZNANIE AS DIAGNOZA, 
     PRZYJECIE_NA_ODDZIAL.NAZWAODDZIALU as ODDZIAŁ, 
     PRZYJECIE_NA_ODDZIAL.DATAPRZ as DATA_PRZYJĘCIA, 
     LEKARZ.LEKARZIMIE as Imię_lekarza, 
     LEKARZ.LEKARZNAZWISKO as Nazwisko_lekarza, 
     PRZYJECIE_NA_ODDZIAL.UWAGI 
    from SZPITAL_DB.PACJENT, SZPITAL_DB.LEKARZ, SZPITAL_DB.PRZYJECIE_NA_ODDZIAL 
where PRZYJECIE_NA_ODDZIAL.PACJENTID = PACJENT.PACJENTID 
    and PRZYJECIE_NA_ODDZIAL.LEKARZID = LEKARZ.LEKARZID 

當我在SQL Developer中運行它的工作原理非常好: enter image description here

但是當我把它轉換成Java我得到了一個錯誤:

ORA-00918: column ambiguously defined 

Java代碼:

private void Get_Data(){ 
    String sql="select PRZYJECIE_NA_ODDZIAL.PRZYJECIEID as Numer_przyjęcia, PRZYJECIE_NA_ODDZIAL.PACJENTID as ID_pacjęta, PACJENT.PACJENTIMIE as Imię,PACJENT.PACJENTNAZWISKO as Nazwisko,PACJENT.PESEL as PESEL, PRZYJECIE_NA_ODDZIAL.ROZPOZNANIE AS DIAGNOZA,PRZYJECIE_NA_ODDZIAL.NAZWAODDZIALU as ODDZIAŁ,PRZYJECIE_NA_ODDZIAL.DATAPRZ as DATA_PRZYJĘCIA, LEKARZ.LEKARZIMIE as Imię_lekarza, LEKARZ.LEKARZNAZWISKO as Nazwisko_lekarza, PRZYJECIE_NA_ODDZIAL.UWAGI from SZPITAL_DB.PACJENT,SZPITAL_DB.LEKARZ, SZPITAL_DB.PRZYJECIE_NA_ODDZIAL where PRZYJECIE_NA_ODDZIAL.PACJENTID = PACJENT.PACJENTID and PRZYJECIE_NA_ODDZIAL.LEKARZID = LEKARZ.LEKARZID"; 
    try{   pst=con.prepareStatement(sql); 
     rs= pst.executeQuery(); 
    jTable1.setModel(DbUtils.resultSetToTableModel(rs)); 
    }catch(Exception e){ 
     JOptionPane.showMessageDialog(null, e); 
+0

編輯是有用的,但現在更難以檢查2個請求是否相同,所以我會把它放在這裏:**我證實,他們在**之前完全一樣,這不是一個小錯字。現在使用編輯後的格式,我們可以看到每個引用都有前綴,所以不應該有歧義... –

+0

由於您已經在每個列引用中明確定義了表,因此您不應該收到此錯誤。因此,這告訴我你在某個地方有一個拼寫錯誤,或者你在使用的Java庫中發現了一個錯誤。我會建議嘗試攔截最終傳遞給數據庫的調用。您可能實際上並沒有通過Java發送相同的腳本,而是通過SQL Developer發送。 – DanK

+0

使您的sql語句儘可能小,我們需要/不需要完整的語句來分析您的問題!並以便於閱讀/比較/分析的方式進行格式化。 – miracle173

回答

0

從您發佈的代碼我最好的猜測,你似乎已經定義

SZPITAL_DB.PACJENT, 
SZPITAL_DB.LEKARZ, 
SZPITAL_DB.PRZYJECIE_NA_ODDZIAL 
在FROM語句

,但你似乎使用如表名來引用它沒有數據庫名稱的PRZYJECIE_NA_ODDZIAL SELECT語句中的SZPITAL_DB.。這同樣適用於PACJENTIDLEKARZID

正如@DanK提到的,也許你的表名中有拼寫錯誤?

+1

如果你已經在'FROM'子句中完全限定了它們,那麼你不需要重複選擇列表中的模式 - 並且這不會導致**列**被明確定義 –

+0

不夠公平,謝謝你的支持! – Koshux