【发布时间】:2018-04-12 19:03:39
【问题描述】:
我有一个与 Oracle 相关的问题。我想以 SAMPLE 子句被参数化的方式从视图或表中选择一个随机样本。
给定下表。
CREATE TABLE FOO AS
(SELECT LEVEL AS ID
FROM DUAL
CONNECT BY LEVEL < 101
);
以下构造起作用,在 SAMPLE 子句中使用文字参数。
SELECT ID FROM FOO SAMPLE (15); -- this will get a 15% sample
然而,
DECLARE
N NUMBER := 50;
BEGIN
FOR r IN
( SELECT ID FROM FOO SAMPLE (N) -- <<< this won't work
)
LOOP
DBMS_OUTPUT.PUT_LINE( r.ID );
END LOOP;
END;
当我们在SAMPLE 子句中添加一个参数时,这个块就会爆炸。如果我们把它当作文字,它就可以编译并工作。
但如果它是一个变量,我会得到以下信息:
ORA-06550: line 5, column 33:
PL/SQL: ORA-00933: SQL command not properly ended
有什么想法吗?我在语法被破坏的地方绞尽脑汁。
【问题讨论】: