2017-12-08 1 views
0

Ich versuche den Wert von "TOTAL_TM_R_PT" zu ändern, wo immer ein bestimmter Spieler auftaucht.PLS-00103: Das Symbol ";" wenn ich eines der folgenden Dinge erwarte: <ein Bezeichner><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; 

Das ist mein Fehler:

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 

Irgendwelche Ideen?

Antwort

1

Sie müssen einen Sammlertyp definieren und BULK COLLECT INTO zum Speichern von Abfrageergebnissen in einer Sammlung verwenden. AS Das Schlüsselwort fehlte auch in Ihrem Code und die Verwendung von Declare ist nicht gültig.

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

Das hat funktioniert! Ich danke dir sehr! – CalcGuy

Verwandte Themen