创建表以保存 9000 个随机数用于演示目的:
CREATE TABLE brianl.random
(
VALUE NUMBER
, id INTEGER
);
在表格中插入 9000 行
由于这是出于演示目的,我决定使用 PL/SQL 循环,因为即使您不熟悉 PL/SQL 也很容易理解。我可以很容易地使用公用表表达式 (CTE),但是如果您不了解 PL/SQL,您将不会了解 CTE
DECLARE
l_cnt INTEGER;
BEGIN
FOR i IN 1 .. 9000
LOOP
INSERT INTO random (id)
VALUES (i);
END LOOP;
COMMIT;
SELECT COUNT (*) c
INTO l_cnt
FROM random;
DBMS_OUTPUT.put_line ('-- '
|| TO_CHAR (SYSDATE, 'YYYY.MM.DD HH24:MI:SS')
|| ' count is: '
|| l_cnt);
END;
-- 2016.11.11 10:28:42 count is: 9000
用一条更新语句用随机值更新 9000 条记录
现在我们有一个包含 9000 个值的表,我们可以根据要求更新 9000 个值。
update random set value = dbms_random.value;
commit;
-- 你可以从我们的表中选择查看这 9000 个随机值
为此目的而创建的
select * from random;
PL/SQL 创建表记录的替代方法
最后,有些人评论说 PL/SQL 是创建值的坏习惯(我不同意,对我来说它很简单,而且因为它是程序性的,对于初学者来说很容易理解),这是一个 CTE执行相同的功能。执行完成后不要忘记提交。
INSERT INTO random (id)
WITH iset (num)
AS (SELECT 1
FROM DUAL
UNION ALL
SELECT num + 1
FROM iset
WHERE num < 9000)
SELECT *
FROM iset;
人们有时使用的另一种方法是从 all_objects 中进行选择。我个人不喜欢这种方法,因为我认为表格只应用于其规定的目的。如果您需要超过 all_objects 中的对象数量,这也是有缺陷的,在我使用的系统上是 82,009,
INSERT INTO random (id)
SELECT ROWNUM
FROM all_objects
WHERE ROWNUM <= 9000;
所以,在我创建这些演示的 Oracle 系统上,以下只会将 82009 行插入到表中,而不是请求的 100000。
INSERT INTO random (id)
SELECT ROWNUM
FROM all_objects
WHERE ROWNUM <= 100000;