在选择

时间:2018-02-01 16:40:49

标签: sql oracle plsql

我正在尝试在执行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);就行了。

2 个答案:

答案 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;
/