2015-11-01 245 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'查询。你还没有发布可复制的测试用例,所以我无法测试我的答案。我确实注意到我刚刚修复的错字。但可能还有更多,我没有看到。 –