Oracle 用于生成随机数据的SQL语句
我有一个Oracle表,我想用随机数据填充它:Oracle 用于生成随机数据的SQL语句,oracle,oracle11g,Oracle,Oracle11g,我有一个Oracle表,我想用随机数据填充它: CREATE TABLE AGENT_HISTORY( EVENTID INTEGER NOT NULL, AGENTID INTEGER NOT NULL, EVENT_DATE DATE, CPU INTEGER, RAM NUMBER, HDD NUMBER, NETWORK_UP NUMBER, NETWORK_DOWN NUMBER ) / -- CREATE INDEXES FOR TABLE AGEN
CREATE TABLE AGENT_HISTORY(
EVENTID INTEGER NOT NULL,
AGENTID INTEGER NOT NULL,
EVENT_DATE DATE,
CPU INTEGER,
RAM NUMBER,
HDD NUMBER,
NETWORK_UP NUMBER,
NETWORK_DOWN NUMBER
)
/
-- CREATE INDEXES FOR TABLE AGENT_HISTORY
CREATE INDEX IX_RELATIONSHIP1 ON AGENT_HISTORY (AGENTID)
/
-- ADD KEYS FOR TABLE AGENT_HISTORY
ALTER TABLE AGENT_HISTORY ADD CONSTRAINT KEY8 PRIMARY KEY (EVENTID)
/
如何生成60天后列事件日期的随机数据?例如,每天我都想插入一些随机网络流量数据?使用下面的pl/sql块生成随机数据,它也会插入到您的表中
INSERT INTO AGENT_HISTORY (EVENTID, AGENTID, EVENT_DATE, CPU, RAM, HDD, NETWORK_UP, NETWORK_DOWN)
SELECT LEVEL, LEVEL, TRUNC(SYSDATE - LEVEL + 1), DBMS_RANDOM.VALUE * 100, DBMS_RANDOM.VALUE, DBMS_RANDOM.VALUE, DBMS_RANDOM.VALUE, DBMS_RANDOM.VALUE
FROM DUAL CONNECT BY LEVEL <= 60;
declare
v_EVENTID INTEGER;
v_AGENTID INTEGER:=1;
v_EVENT_DATE DATE:=sysdate-60;
v_CPU INTEGER;
v_RAM NUMBER;
v_HDD NUMBER;
v_NETWORK_UP NUMBER;
v_NETWORK_DOWN NUMBER;
begin
for i in 1..100
loop
v_EVENT_DATE:=v_EVENT_DATE-1;
select i,ceil(dbms_random.value(1,1000)),floor(dbms_random.value(1,1000)),ceil(dbms_random.value(1,100))*2,floor(dbms_random.value(1,100))*2,100+i
into v_EVENTID,v_CPU,v_ram,v_HDD,v_NETWORK_UP,v_NETWORK_DOWN from dual;
--insert into AGENT_HISTORY values(v_EVENTID,v_AGENTID,v_EVENT_DATE,v_CPU,v_ram,v_HDD,v_NETWORK_UP,v_NETWORK_DOWN);
dbms_output.put_line(v_EVENTID||' '||v_AGENTID||' '||v_EVENT_DATE||' '||v_CPU||' '||v_ram||' '||v_HDD||' '||v_NETWORK_UP||' '||v_NETWORK_DOWN) ;
end loop;
end;
使用下面的pl/sql块生成随机数据,并将其插入到表中
declare
v_EVENTID INTEGER;
v_AGENTID INTEGER:=1;
v_EVENT_DATE DATE:=sysdate-60;
v_CPU INTEGER;
v_RAM NUMBER;
v_HDD NUMBER;
v_NETWORK_UP NUMBER;
v_NETWORK_DOWN NUMBER;
begin
for i in 1..100
loop
v_EVENT_DATE:=v_EVENT_DATE-1;
select i,ceil(dbms_random.value(1,1000)),floor(dbms_random.value(1,1000)),ceil(dbms_random.value(1,100))*2,floor(dbms_random.value(1,100))*2,100+i
into v_EVENTID,v_CPU,v_ram,v_HDD,v_NETWORK_UP,v_NETWORK_DOWN from dual;
--insert into AGENT_HISTORY values(v_EVENTID,v_AGENTID,v_EVENT_DATE,v_CPU,v_ram,v_HDD,v_NETWORK_UP,v_NETWORK_DOWN);
dbms_output.put_line(v_EVENTID||' '||v_AGENTID||' '||v_EVENT_DATE||' '||v_CPU||' '||v_ram||' '||v_HDD||' '||v_NETWORK_UP||' '||v_NETWORK_DOWN) ;
end loop;
end;
如果您希望代码具有过程生成的感觉,而不需要实际切换到PL/SQL上下文,那么可以使用子句生成数据
INSERT INTO agent_history (EVENTID, AGENTID, EVENT_DATE, CPU, RAM, HDD, NETWORK_UP, NETWORK_DOWN)
SELECT EVENTID, AGENTID, EVENT_DATE, CPU, RAM, HDD, NETWORK_UP, NETWORK_DOWN
FROM agent_history
MODEL DIMENSION BY (0 ITERATION)
MEASURES (EVENTID, AGENTID, EVENT_DATE, CPU, RAM, HDD, NETWORK_UP, NETWORK_DOWN)
RULES ITERATE (60) ( --Or however many days you want to iterate over
EVENTID[ITERATION_NUMBER] = 100-ITERATION_NUMBER,
AGENTID[ITERATION_NUMBER] = 1,
EVENT_DATE[ITERATION_NUMBER] = TRUNC(SYSDATE-ITERATION_NUMBER+1),
CPU[ITERATION_NUMBER] = ceil(dbms_random.value(1,100)),
RAM[ITERATION_NUMBER] = floor(dbms_random.value(1,100)),
HDD[ITERATION_NUMBER] = ceil(DBMS_RANDOM.VALUE * 100),
NETWORK_UP[ITERATION_NUMBER] = DBMS_RANDOM.VALUE * 100+1,
NETWORK_DOWN[ITERATION_NUMBER] = DBMS_RANDOM.VALUE * ITERATION_NUMBER
)
ORDER BY EVENT_DATE;
如果您希望代码具有过程生成的感觉,而不需要实际切换到PL/SQL上下文,那么可以使用子句生成数据
INSERT INTO agent_history (EVENTID, AGENTID, EVENT_DATE, CPU, RAM, HDD, NETWORK_UP, NETWORK_DOWN)
SELECT EVENTID, AGENTID, EVENT_DATE, CPU, RAM, HDD, NETWORK_UP, NETWORK_DOWN
FROM agent_history
MODEL DIMENSION BY (0 ITERATION)
MEASURES (EVENTID, AGENTID, EVENT_DATE, CPU, RAM, HDD, NETWORK_UP, NETWORK_DOWN)
RULES ITERATE (60) ( --Or however many days you want to iterate over
EVENTID[ITERATION_NUMBER] = 100-ITERATION_NUMBER,
AGENTID[ITERATION_NUMBER] = 1,
EVENT_DATE[ITERATION_NUMBER] = TRUNC(SYSDATE-ITERATION_NUMBER+1),
CPU[ITERATION_NUMBER] = ceil(dbms_random.value(1,100)),
RAM[ITERATION_NUMBER] = floor(dbms_random.value(1,100)),
HDD[ITERATION_NUMBER] = ceil(DBMS_RANDOM.VALUE * 100),
NETWORK_UP[ITERATION_NUMBER] = DBMS_RANDOM.VALUE * 100+1,
NETWORK_DOWN[ITERATION_NUMBER] = DBMS_RANDOM.VALUE * ITERATION_NUMBER
)
ORDER BY EVENT_DATE;
您必须使用dbms_随机包来生成随机数。60天过去意味着什么?以及您必须生成多少行??我需要60个事件或60天以前的更多事件。是否要为所有列随机生成数据??仅为AGENTID我需要始终为值1。为表结构器提供诸如唯一键、主键等约束您必须使用dbms_随机包生成随机数。60天过去意味着什么?以及您必须生成多少行??我需要60个事件或60天以前的更多事件。是否要为所有列随机生成数据??仅为AGENTID我需要始终为值1。为表结构器提供诸如唯一键、主键等约束。我更新了帖子。列AGENTID始终具有值1I get Error report-ORA-06550:第18行,第13列:PL/SQL:ORA-00942:表或视图不存在ORA-06550:第18行,第1列:PL/SQL:SQL语句被忽略06550。00000-行%s,列%s:\n%s*原因:通常是PL/SQL编译错误*操作:请检查我已更新的最新pl/sql块。我错过了ram列,这就是为什么我们得到错误:我得到错误报告-ORA-00001:unique constraint ADMIN.KEY8在第16 00001行违反了ORA-06512:。00000-违反了唯一约束%s.%s*原因:UPDATE或INSERT语句试图插入重复的密钥。对于在DBMS MAC模式下配置的受信任Oracle,如果在不同级别存在重复条目,则可能会看到此消息*操作:删除唯一限制或不插入密钥。我再次编辑了pl/sql块,请检查一次。我更新了帖子。列AGENTID始终具有值1I get Error report-ORA-06550:第18行,第13列:PL/SQL:ORA-00942:表或视图不存在ORA-06550:第18行,第1列:PL/SQL:SQL语句被忽略06550。00000-行%s,列%s:\n%s*原因:通常是PL/SQL编译错误*操作:请检查我已更新的最新pl/sql块。我错过了ram列,这就是为什么我们得到错误:我得到错误报告-ORA-00001:unique constraint ADMIN.KEY8在第16 00001行违反了ORA-06512:。00000-违反了唯一约束%s.%s*原因:UPDATE或INSERT语句试图插入重复的密钥。对于在DBMS MAC模式下配置的受信任Oracle,如果在不同级别存在重复条目,则可能会看到此消息*操作:删除唯一限制或不插入密钥。我再次编辑了pl/sql块,请检查一次。