在之前的一篇文章中,我在编译下面的过程时遇到了一些问题(它应该profile
根据作者编写的任务数量来更新属性) - 现在,它确实编译了(虽然有警告)并且当我尝试执行它时, 它失败。我不知道为什么。我正在使用 ExecuteQuery 连接到远程 Oracle 数据库。该过程涉及的表是:
Task(TaskID, ..., AuthorID)
Author(AuthorID, profile, name, ...)
这是程序(我的具体问题如下):
ALTER SESSION SET PLSQL_WARNINGS='ENABLE:ALL';
CREATE OR REPLACE PROCEDURE profil_stufe
IS
CURSOR c1 IS SELECT AuthorID, COUNT(AuthorID) as Total FROM Task
GROUP BY AuthorID;
result INTEGER c1%ROWTYPE;
BEGIN
OPEN c1;
LOOP
FETCH c1 INTO result;
EXIT WHEN c1%NOTFOUND;
IF(result.Total = 2 OR result.Total = 3) THEN
UPDATE Author SET profile = 'Advanced' WHERE AuthorID = result.AuthorID;
END IF;
IF(result.Total >= 4) THEN
UPDATE Author SET profile = 'proficient' WHERE AuthorID = result.AuthorID;
END IF;
END LOOP;
CLOSE c1;
END;
我的问题:
首先,我无法检索编译过程时产生的警告。我尝试了类似的查询
select plsql_warnings from user_plsql_object_settings ps where ps.name = 'profil_stufe';
,select * from user_errors ur where ur.name = 'profil_stufe';
但都没有提供任何结果,即使该过程确实编译时出现警告。当我执行时
execute profil_stufe
出现错误
ORA-06550:第 1 行,第 16 列:PLS-00905:对象 CS261_20.PROFIL_STUFE 无效 ORA-06550:第 1 行,第 7 列:PL/SQL:语句被忽略
有人可以帮帮我吗?我知道,我可以避免创建过程并以其他方式实现相同的功能。但似乎我缺少一些 PL/SQL 的基本概念,我真的很想了解它们……所以,感谢您的帮助!