我正在尝试在执行SELECT FROM之前重置我的随机数种子。但是,每次运行它时,我都必须分别运行两个语句。理想情况下,我希望有以下工作:
BEGIN
exec dbms_random.seed(6);
SELECT * FROM myTable
ORDER BY dbms_random.value()
END
我收到错误Encountered the symbol DBMS_RANDOM when expecting one of the following :=.(@%;
但是如果我只运行exec dbms_random.seed(6);
就行了。
答案 0 :(得分:3)
EXEC[UTE]
是一个SQLPLUS命令,你不能将它用于PLSQL块。
此外,您需要INTO
在PLSQL块中使用SELECT
查询。如果您的查询可以提供多行,则必须使用BULK COLLECT INTO
。
您的代码可能类似于:
DECLARE
something myTable%rowtype;
BEGIN
dbms_random.seed(6);
SELECT *
INTO something
FROM myTable
ORDER BY dbms_random.value();
END;
但是,我不建议使用select *
之类的内容;最好明确地写出你需要得到的列。
答案 1 :(得分:0)
另外,在select into语句中使用order by语句,该语句被定义为仅返回1行?
似乎你想要选择许多需要光标的随机行:
DECLARE
CURSOR something_cur IS
SELECT *
FROM myTable
ORDER BY dbms_random.value();
something_rec something_cur%ROWTYPE;
BEGIN
dbms_random.seed(6);
OPEN something_cur;
FETCH something_cur INTO something_rec;
CLOSE something_cur;
END;
/