2017-12-08 26 views
0

特定のプレイヤーが表示されているすべての時間を「TOTAL_TM_R_PT」の値に変更しようとしています。PLS-00103:シンボル「;」が検出されました。次のいずれかを予期しているとき:<識別子><a d

create or replace PROCEDURE CalculatePlayerTMPoints(Player IN NUMBER,PointNum IN NUMBER) 
DECLARE PtValue INT; 
UserNM TABLE; 
BEGIN 
    SELECT POINT_VALUE INTO PtValue FROM POINTS WHERE POINTS.POINT_ID = PointNum;  
    SELECT ACCT_USERNAME INTO UserNM FROM ROSTERS WHERE ROSTERS.PLAYER_ID = Player; 
    for i in 1..UserNM.count 
    loop 
     UPDATE TEAM_MANAGER_POINTS 
     SET TOTAL_TM_R_PT = TOTAL_TM_R_PT + PtValue 
     WHERE TEAM_MANAGER_POINTS.ACCT_USERNAME = UserNM; 
    End loop; 
END; 

これは私のエラーです:

Error(3,1): PLS-00103: Encountered the symbol "DECLARE" when expecting one of 
the following:  ; is with authid as cluster order using external  
deterministic parallel_enable pipelined result_cache accessible 

任意のアイデア?

答えて

1

コレクションタイプを定義し、クエリ結果をコレクションに格納するにはBULK COLLECT INTOを使用する必要があります。 ASキーワードもコードにありませんでしたが、Declareを使用すると無効です。

create or replace PROCEDURE CalculatePlayerTMPoints(Player IN NUMBER,PointNum IN NUMBER) AS 
PtValue INT; 
TYPE usertype IS TABLE OF ROSTERS.ACCT_USERNAME%TYPE; 
UserNM usertype ; 
BEGIN 
    SELECT POINT_VALUE INTO PtValue FROM POINTS WHERE POINTS.POINT_ID = PointNum;  
    SELECT ACCT_USERNAME BULK COLLECT INTO UserNM FROM ROSTERS WHERE ROSTERS.PLAYER_ID = Player; 
    for i in 1..UserNM.count 
    loop 
     UPDATE TEAM_MANAGER_POINTS 
     SET TOTAL_TM_R_PT = TOTAL_TM_R_PT + PtValue 
     WHERE ACCT_USERNAME = UserNM(i); 
    End loop; 
END; 
+0

これは機能しました。どうもありがとうございます! – CalcGuy

関連する問題