PLS-00653 空行错误(Aggregate/table 范围内不允许使用 Aggregate/table 函数)
PLS-00653 Error on an empty line (Aggregate/table functions are not allowed in PL/SQL scope)
我正在尝试 运行 我制作的 PL/SQL 脚本,但出现错误:
PLS-00653: aggregate/table functions are not allowed in PL/SQL scope
这里的问题不是错误本身,而是错误所在的行。
这是抛出此错误的 PL/SQL 块:
DECLARE
TYPE l_code_arr_typ IS VARRAY(3) OF VARCHAR2(100);
l_code_arr l_code_arr_typ;
l_objet objet_interface_pkg.objet_interface_typ;
l_resultat CLOB;
l_valeur valeur_pkg.valeur_typ;
l_liens lien_objet_interface_pkg.lien_objet_interface_tab;
l_rows NUMBER;
BEGIN
l_code_arr := l_code_arr_typ('champ.fonctions.dossier.particulier',
'champ.fonctions.region.admin',
'champ.fonctions.ministere.organisme');
l_resultat := '{';
FOR l_idx IN 1 .. l_code_arr.count LOOP
l_objet := objet_interface_pkg.obtenir_fnc(p_code => l_code_arr(l_idx),
p_acron_sys => :acronyme);
l_resultat := l_resultat || '"' || l_objet.code || '":[';
l_liens := lien_objet_interface_pkg.obtenir_par_objet_fnc(p_id_objet => l_objet.id_obj);
FOR l_lien IN (SELECT * FROM TABLE(l_liens)) LOOP
l_valeur := valeur_pkg.obtenir_fnc(p_id => l_lien.id_valeur);
l_resultat := l_resultat || '"' || l_valeur.valeur || '"';
FOR l_enfant IN (SELECT *
FROM TABLE(valeur_pkg.obtenir_enfants_fnc(p_id_parent => l_lien.id_valeur,
p_code => l_valeur.valeur))) LOOP
l_resultat := l_resultat || ',"' || l_enfant.valeur || '"';
END LOOP;
END LOOP;
l_resultat := l_resultat || '],';
END LOOP;
<<<<<<<<<< ERROR THROWN HERE (EMPTY LINE)
l_resultat := substr(l_resultat, 1, length(l_resultat) - 1) || '}';
dbms_output.put_line(l_resultat);
END;
错误在代码块末尾的第四行 34:17(行:列)上引发。可以看到真正的问题是这一行是空行。此外,该空行附近的 none 行包含对聚合函数的调用。
那么 aggregate/table 函数的调用在哪里?
我想知道问题是否真的来自我的代码,或者我的 PL/SQL Developer 是否已损坏。
希望有人能帮助我...
我找到了解决方案!
问题是函数 lien_objet_interface_pkg.obtenir_par_objet
是 PIPELINED
并且流水线 return 不能存储在变量中。
所以这两行...
l_liens := lien_objet_interface_pkg.obtenir_par_objet_fnc(p_id_objet => l_objet.id_obj);
FOR l_lien IN (SELECT * FROM TABLE(l_liens)) LOOP
...需要像这样合并成一行:
FOR l_lien IN (SELECT * FROM TABLE(lien_objet_interface_pkg.obtenir_par_objet_fnc(p_id_objet => l_objet.id_obj))) LOOP
但是,我仍然不知道为什么 PL\SQL 开发人员说我的错误来自第 34 行,这可能仍然是个谜。如果有人知道这个谜团的答案,请随时告诉我。
我正在尝试 运行 我制作的 PL/SQL 脚本,但出现错误:
PLS-00653: aggregate/table functions are not allowed in PL/SQL scope
这里的问题不是错误本身,而是错误所在的行。
这是抛出此错误的 PL/SQL 块:
DECLARE
TYPE l_code_arr_typ IS VARRAY(3) OF VARCHAR2(100);
l_code_arr l_code_arr_typ;
l_objet objet_interface_pkg.objet_interface_typ;
l_resultat CLOB;
l_valeur valeur_pkg.valeur_typ;
l_liens lien_objet_interface_pkg.lien_objet_interface_tab;
l_rows NUMBER;
BEGIN
l_code_arr := l_code_arr_typ('champ.fonctions.dossier.particulier',
'champ.fonctions.region.admin',
'champ.fonctions.ministere.organisme');
l_resultat := '{';
FOR l_idx IN 1 .. l_code_arr.count LOOP
l_objet := objet_interface_pkg.obtenir_fnc(p_code => l_code_arr(l_idx),
p_acron_sys => :acronyme);
l_resultat := l_resultat || '"' || l_objet.code || '":[';
l_liens := lien_objet_interface_pkg.obtenir_par_objet_fnc(p_id_objet => l_objet.id_obj);
FOR l_lien IN (SELECT * FROM TABLE(l_liens)) LOOP
l_valeur := valeur_pkg.obtenir_fnc(p_id => l_lien.id_valeur);
l_resultat := l_resultat || '"' || l_valeur.valeur || '"';
FOR l_enfant IN (SELECT *
FROM TABLE(valeur_pkg.obtenir_enfants_fnc(p_id_parent => l_lien.id_valeur,
p_code => l_valeur.valeur))) LOOP
l_resultat := l_resultat || ',"' || l_enfant.valeur || '"';
END LOOP;
END LOOP;
l_resultat := l_resultat || '],';
END LOOP;
<<<<<<<<<< ERROR THROWN HERE (EMPTY LINE)
l_resultat := substr(l_resultat, 1, length(l_resultat) - 1) || '}';
dbms_output.put_line(l_resultat);
END;
错误在代码块末尾的第四行 34:17(行:列)上引发。可以看到真正的问题是这一行是空行。此外,该空行附近的 none 行包含对聚合函数的调用。
那么 aggregate/table 函数的调用在哪里?
我想知道问题是否真的来自我的代码,或者我的 PL/SQL Developer 是否已损坏。
希望有人能帮助我...
我找到了解决方案!
问题是函数 lien_objet_interface_pkg.obtenir_par_objet
是 PIPELINED
并且流水线 return 不能存储在变量中。
所以这两行...
l_liens := lien_objet_interface_pkg.obtenir_par_objet_fnc(p_id_objet => l_objet.id_obj);
FOR l_lien IN (SELECT * FROM TABLE(l_liens)) LOOP
...需要像这样合并成一行:
FOR l_lien IN (SELECT * FROM TABLE(lien_objet_interface_pkg.obtenir_par_objet_fnc(p_id_objet => l_objet.id_obj))) LOOP
但是,我仍然不知道为什么 PL\SQL 开发人员说我的错误来自第 34 行,这可能仍然是个谜。如果有人知道这个谜团的答案,请随时告诉我。