Sql 如何在oracle中从表对象中采样数据
我试图创建一个程序,我可以通过采样参数,我尝试了许多方法,但失败了Sql 如何在oracle中从表对象中采样数据,sql,oracle,plsql,oracle11g,Sql,Oracle,Plsql,Oracle11g,我试图创建一个程序,我可以通过采样参数,我尝试了许多方法,但失败了 create or replace PROCEDURE proc_sampling ( v_sample NUMBER ) AS BEGIN -- USE SAMPLE PARAMETER (v_sample) TO SAMPLE THE BELOW SUB-QUERY FOR i IN ( SELECT DISTINCT * FROM
create or replace PROCEDURE proc_sampling (
v_sample NUMBER
) AS
BEGIN
-- USE SAMPLE PARAMETER (v_sample) TO SAMPLE THE BELOW SUB-QUERY
FOR i IN (
SELECT DISTINCT
*
FROM
t1,
t2,
t3
WHERE
t1.id=t2.id
and t2.fid=t3.fid
) LOOP
BEGIN
INSERT INTO mytable (
x,y,z
) VALUES (
v1,v2,v3
);
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
END LOOP;
COMMIT;
END;
:
可以在基表的查询中指定SAMPLE子句
物化视图或关键视图的容器表
保存。不能在非关键视图上指定此子句
保存
因此,表函数既不是物化视图的基表、容器表,也不是键保留视图
要返回一些随机行,可以按dbms_random.value排序,然后获取前N行:
select *
from table (
cast (
multiset (
select level
from dual
connect by level <= 10
) as sys.odcivarchar2list
)
)
order by dbms_random.value
fetch first 3 rows only;
COLUMN_VALUE
6
2
10
注意,这必须对整个数据集进行排序。如果这是大的,可能需要一段时间 我认为您可以使用下面的代码,它使用oracle的DBMS\u随机包
CREATE OR REPLACE PROCEDURE PROC_SAMPLING (
V_SAMPLE NUMBER
) AS
BEGIN
-- USE SAMPLE PARAMETER (v_sample) TO SAMPLE THE BELOW SUB-QUERY
BEGIN
INSERT INTO MYTABLE (X, Y, Z)
SELECT
<your_related_cols>
FROM
(
SELECT DISTINCT
<your_related_cols>,
ROW_NUMBER() OVER(ORDER BY DBMS_RANDOM.VALUE()) AS RN
FROM
T1 JOIN T2 ON T1.ID = T2.ID
JOIN T3 ON T2.FID = T3.FID
)
WHERE RN <= 20;
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
COMMIT;
END;
/
干杯 您希望此过程的输出是什么。请仅针对您的需求,因为可能有一些简单的解决方案可用。我只需要传递一个值作为过程中的采样参数,我将从表rs中解释moreSELECT*,其中rownum@Tejash实际上我想用样品,因为它会改变结果,更好地代表我的情况,你的更新似乎是一个完全不同的问题,从你发布的第一个。但你的要求还不清楚。我认为您希望使用v_sample参数限制插入mytable的行数。你有没有进一步的标准,比如随机性?