以下过程未完成,但我在尝试生成1和表大小之间的随机整数时遇到问题。任何想法?
create or replace PROCEDURE AssignPlayersTMs AS
TYPE usertype IS TABLE OF TEAM_MANAGERS.ACCT_USERNAME%TYPE;
UserNM usertype;
TYPE usertype2 IS TABLE OF ROSTERS.PLAYER_ID%TYPE;
Play usertype2;
Rn INT;
BEGIN
SELECT ACCT_USERNAME BULK COLLECT INTO UserNM FROM TEAM_MANAGERS;
SELECT PLAYER_ID BULK COLLECT INTO Play FROM PLAYERS;
for i in 1..UserNM.count
loop
SELECT FLOOR(RAND()*(Play.count-1)+1) INTO Rn;
end loop;
END;
编译器错误:
Error(17,9): PL/SQL: SQL Statement ignored
Error(17,54): PL/SQL: ORA-00923: FROM keyword not found where expected
答案 0 :(得分:2)
SELECT
在SQL中需要FROM
子句 - 就像错误所说的那样。但是,您不需要SELECT
为变量赋值。只需指定它:
此外,Oracle没有rand()
功能。你必须使用dbms_random
create or replace PROCEDURE AssignPlayersTMs AS
TYPE usertype IS TABLE OF TEAM_MANAGERS.ACCT_USERNAME%TYPE;
UserNM usertype;
TYPE usertype2 IS TABLE OF ROSTERS.PLAYER_ID%TYPE;
Play usertype2;
Rn INT;
BEGIN
SELECT ACCT_USERNAME BULK COLLECT INTO UserNM FROM TEAM_MANAGERS;
SELECT PLAYER_ID BULK COLLECT INTO Play FROM PLAYERS;
for i in 1..UserNM.count
loop
rn := dbms.random.value(1, Play.count-1);
end loop;
END;