以前の投稿で、以下の手順 (作成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';
orのようなクエリを試してみ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 のいくつかの基本的な概念が欠けているようで、それらを理解したいと思っています...だから、助けてくれてありがとう!