我目前正在 APEX 中开发 Oracle 数据库。
首先,我无法使用任何工具。我只能使用 apex.oracle.com 中提供的内容,并且我正在 NotePad++ 中编写脚本,然后再将其上传到那里。这是一项学校作业,所以我不允许使用任何其他工具,即使有一些东西可以让事情变得更容易。
我正在创建一个长脚本,它在数据库中创建一堆表,在每个表中创建一堆记录,并创建所有约束。这部分工作正常。现在我必须在同一个脚本中创建几个函数和过程,然后再创建其他内容。
每次我尝试创建一个时,都会得到以下信息:ORA-24344:成功但出现编译错误
此外,出现此错误后脚本中的其他指令也不会执行。错误发生之前的一切都工作正常。
这是造成此错误的函数之一:
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;
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
来自哪个表。 或者nom
或prenum
或typearticle
。 使用别名来标识列来自哪个表。 这使您的代码更加清晰,并且在将来添加可能具有相同列名称的其他表或列时更加健壮(例如,多个实体可能具有 nom
列)。安吉特·辛格 Manoj hai na lagao hai na lagao hai na lagao hai na lagao hai na lagao hai na lagao hai kya humse hai to batao kya