Работает следующий блок PL / SQL:
DECLARE
r TABLE1%ROWTYPE;
BEGIN
SELECT * INTO r FROM TABLE1 SAMPLE(1) WHERE ROWNUM = 1;
END;
Однако, когда я пытаюсь заменить литерал переменной в предложении SAMPLE, Oracle возвращает синтаксическую ошибку:
DECLARE
s NUMBER;
r TABLE1%ROWTYPE;
BEGIN
s := 1;
SELECT * INTO r FROM TABLE1 SAMPLE(s) WHERE ROWNUM = 1;
END;
ORA-06550: line 6, column 39:
PL/SQL: ORA-00933: SQL command not properly ended
Что я делаю не так?
Я использую Oracle 10 и SQL Developer.
(Это упрощенные примеры. Что я на самом деле пытаюсь сделать на практике, так эточтобы оптимизировать выбор случайной строки, где процент выборки будет рассчитываться динамически, исходя из текущего числа строк в таблице. Поэтому я не могу использовать литерал, мне нужна переменная, чтобы назначить результат вычисления.)