2015-11-01 249 views
0

我目前正在使用APEX中的oracle數據庫。Oracle Apex:ORA-24344編譯錯誤成功

首先,我沒有訪問任何工具。我只能使用apex.oracle.com中提供的內容,並且在將它上傳到NotePad ++之前將其寫入該腳本。這是一個學校任務,所以我不允許使用任何其他工具,即使有些事情會使事情變得更容易。

我正在創建一個長腳本,在數據庫中創建一堆表格,在每個表格中創建一堆記錄,並創建所有約束。這部分工作正常。現在我必須在同一個腳本中創建幾個函數和過程,然後是其他的東西。

我每次嘗試創建一個,我得到這個:ORA-24344:與編譯錯誤

同樣的成功,這個錯誤後,在腳本中的其他指令都不予執行。錯誤發生之前的所有事情都能正常工作。

http://i.imgur.com/lHIjfcE.png

這裏是一個創建此錯誤的功能之一:

CREATE OR REPLACE FUNCTION SP_03Recherche (titre_art VARCHAR2, nom_aut VARCHAR2, type_art VARCHAR2) 
RETURN CURSOR 
IS 
    CURSOR articles (p_titre_art VARCHAR2, p_nom_aut VARCHAR2, p_type_art VARCHAR2) IS 
    SELECT * FROM BI_Articles INNER JOIN (BI_ArticlesAuteurs INNER JOIN BI_Auteurs ON BI_ArticlesAuteurs.AuteurID = BI_Auteurs.AuteurID) ON BI_Articles.ISBN = BI_ArticlesAuteurs.ISBN 
    WHERE (Titre LIKE p_titre_art) AND ((Nom LIKE p_nom_aut) OR (Prenom LIKE p_nom_aut)) AND TypeArticle LIKE type_art; 
BEGIN 
    RETURN articles(titre_art, nom_aut, type_art); 
END; 
+0

什麼'show error'給你? –

+0

我如何在apex中使用它? –

回答

0

sys_refcursor是,你似乎想返回的數據類型。這是弱引用遊標的通用類型。我的猜測是,你想要的東西像

CREATE OR REPLACE FUNCTION SP_03Recherche (
    p_titre_art VARCHAR2, 
    p_nom_aut VARCHAR2, 
    p_type_art VARCHAR2 
) 
    RETURN sys_refcursor; 
IS 
    l_rc sys_refcursor; 
BEGIN 
    OPEN l_rc 
    FOR select * 
     from bi_articles art 
       inner join BI_ArticlesAuteurs art_auth 
       on (art.isbn = art_auth.isbn) 
       inner join BI_Auteurs auth 
       on (art_auth.auteurID = auth.auteurID) 
     where titre LIKE p_titre_art 
      and (nom LIKE p_nom_auth or 
       prenum LIKE p_nom_auth) 
      and typearticle LIKE type_art; 

    RETURN l_rc; 
END; 

現在幾點建議

  • 做一個select *幾乎總是一個壞主意。特別是當你加入多個表時。每次有人向三個表中的任何一個添加附加列時,是否真的想要更改結果集的結構?這似乎不太可能。
  • 無處不在使用別名。看代碼,我不知道什麼表titre來自。或者nomprenumtypearticle。使用別名來標識列來自哪個表。當將來添加可能具有相同列名稱的附加表格或列(例如,多個實體可能具有nom列)時,這會使代碼更加清晰並使其更加健壯。
+0

非常感謝您的意見。實際上,select *和缺少的表名是我的問題的結果,所以我一直在測試很多東西,而我恰好發佈了儘可能簡化的醜陋版本以嘗試查找錯誤。我將立即測試您的想法 –

+0

我的代碼中出現了完全相同的錯誤(ORA-24344:編譯錯誤成功)(沒有更改任何內容)。它是否在「真正」的Oracle中工作?我開始懷疑問題是因爲Apex。 –

+0

「顯示錯誤」顯示什麼?或者從'user_errors'或'all_errors'查詢。你還沒有發佈可複製的測試用例,所以我無法測試我的答案。我確實注意到我剛剛修復的錯字。但可能還有更多,我沒有看到。 –