2015-05-25 48 views
0

我有以下功能:創建與SQL函數SQL查詢時的Apex解析錯誤

CREATE OR REPLACE FUNCTION calc_a(BIDoctor number) RETURN number 
IS 
    num_a number; 
BEGIN 
    select count(NAppoint) 
    into num_a 
    from Appointment a 
    where BIDoctor = a.BIDoctor; 
    RETURN num_a; 
END calc_a; 

我們要的是加上一欄的一份報告顯示我們的文檔有約會的數量是什麼。

select a.BIdoctor "NUM_ALUNO", 
    a.NameP "Nome", 
    a.Address "Local", 
    a.Salary "salary", 
    a.Phone "phone", 
    a.NumberService "Curso", 
    c.BIdoctor "bi", 
    calc_media(a.BIdoctor) "consultas" 
FROM "#OWNER#"."v_Doctor" a, "#OWNER#"."Appointment" c 
WHERE a.BIdoctor = c.BIdoctor; 

當我們在頂點寫區域源時,我們得到了這個。 但它顯示了一個解析錯誤,我正在尋找這約2小時,沒有任何東西。

的Apex顯示我:

解析錯誤ON下面的查詢

+2

不要害羞。編輯你的問題,幷包括你得到的錯誤。 –

+1

calc_a和calc_media是相同的函數嗎? – Lennart

+0

是的,我得到了一個錯誤。出現糾正後: 查詢無法解析,請檢查您的查詢的語法。 (ORA-00942:表或視圖不存在) 我有一個v_Doctor視圖btw。 – gg49

回答

0

這可能是因爲您的所有雙引號的,你似乎有隨機套管的一切。雙引號表示您使用帶引號的標識符,即必須使用該名稱創建對象/列確切名稱 - "Hi""hi"不同。通過你的功能判斷擺脫全部雙引號 - 你似乎並不需要它們。

更一般地不要使用帶引號的標識符。永遠。他們值得,他們造成更大的麻煩。如果有必要,你會知道什麼時候你想使用它們。

您的SELECT語句還有一些問題。

  • 您正在使用隱式聯接。顯式連接在SQL-92中添加;現在是時候開始使用它們了 - 對於未來的職業生涯,您可能會與其他RDBMS進行交互。
  • 絕對不需要你的功能;您可以改用analytic function,COUNT()
  • 你的別名有點怪 - 爲什麼a指的是醫生和c約會?

把所有的這一起你會得到:

select d.bidoctor as num_aluno 
    , d.namep as nome 
    , d.address as local 
    , d.salary as salary 
    , d.phone as phone 
    , d.numberservice as curso 
    , a.bidoctor as bi 
    , count(nappoint) over (partition by a.bidoctor) as consultas 
    from #owner#.v_doctor a 
    join #owner#.appointment c 
    on d.bidoctor = a.bidoctor; 

我猜什麼的APPOINTMENTV_DOCTOR的主鍵,但我希望他們分別是NAPPOINTBIDOCTOR


順便說一句,您的函數永遠不會返回正確的結果,因爲您沒有限制查詢中參數的範圍;您只需計算APPOINTMENT中的記錄數。當你命名參數與表中的列相同時,你必須明確地將範圍限制在你寫的任何查詢中的參數,例如:

select count(nappoint) into num_a 
    from appointment a 
where calc_a.bidoctor = a.bidoctor; -- HERE 
+0

無法解析導致該字符無效。我嘗試這個 選擇d.bidoctor爲num_aluno,d.namep如諾姆 ,d.address當地 ,d.salary薪金 ,d.phone如電話 ,d.numberservice爲CURSO ,c.bidoctor作爲來自#所有者#.v_doctor d 加入#所有者#。約會c 對d.bidoctor = c.bidoctor;請求數(nappoint)結束(由c.bidoctor分區); 它仍然給錯誤無效字符 – gg49