[英]PL/SQL Procedure for enhancing multiple update statements for a Table
我需要用隨機值更新我的數據庫中的一個表,以便我編寫了多個更新語句,但是執行需要很多時間,我只需要更新包含 100 列的表中的 15 列。 有人可以幫我為以下語句編寫一個 PL/SQL 過程。 我有 15 列要更新。 我已經寫了要使用變量值字段更新的列的 ID 號
先感謝您。
UPDATE MY_Table
SET COL1O=DBMS_RANDOM.STRING('A', DBMS_RANDOM.VALUE(10, 15))
where TRIM(COL1) IS NOT NULL ;
UPDATE MY_Table
SET COL11=DBMS_RANDOM.STRING('A', DBMS_RANDOM.VALUE(10, 15))
where TRIM(COL2) IS NOT NULL ;
UPDATE MY_Table
SET COL12=DBMS_RANDOM.STRING('A', DBMS_RANDOM.VALUE(8, 15))
where TRIM(COL3) IS NOT NULL ;
UPDATE MY_Table
SET COL13=DBMS_RANDOM.STRING('A', DBMS_RANDOM.VALUE(8, 15))
where TRIM(COL4) IS NOT NULL ;
UPDATE MY_Table
SET COL14=DBMS_RANDOM.STRING('A', DBMS_RANDOM.VALUE(8, 15))
where TRIM(COL5) IS NOT NULL;
UPDATE MY_Table
SET COL18=DBMS_RANDOM.STRING('A', DBMS_RANDOM.VALUE(1, 2))
where TRIM(COL18) IS NOT NULL;
UPDATE MY_Table
SET COL22=DBMS_RANDOM.VALUE(1, 1))
where TRIM(COL22) IS NOT NULL;
UPDATE MY_Table
SET COL37=DBMS_RANDOM.VALUE(1, 5))
where TRIM(COL37) IS NOT NULL;
UPDATE MY_Table
SET COL114=DBMS_RANDOM.VALUE(8, 10))
where TRIM(COL114) IS NOT NULL;
UPDATE MY_Table
SET COL140=DBMS_RANDOM.VALUE(8, 10))
where TRIM(COL140) IS NOT NULL;
UPDATE MY_Table
SET COL141=DBMS_RANDOM.VALUE(5, 15))
where TRIM(COL141) IS NOT NULL;
UPDATE MY_Table
SET COL145=DBMS_RANDOM.VALUE(8, 11))
where TRIM(COL145) IS NOT NULL;
UPDATE MY_Table
SET COL192=DBMS_RANDOM.VALUE(0.00, 9999999999999.00)
where TRIM(COL114) IS NOT NULL;
UPDATE MY_Table
SET COL193=DBMS_RANDOM.VALUE(0.00, 9999999999999.00)
where TRIM(COL114) IS NOT NULL;
UPDATE MY_Table
SET COL195=DBMS_RANDOM.VALUE(0.00, 9999999999999.00)
where TRIM(COL114) IS NOT NULL;
UPDATE MY_Table
SET COL114=DBMS_RANDOM.VALUE(5, 24))
where TRIM(COL114) IS NOT NULL;
您不需要 15 條更新語句,您可以在一條語句中執行此操作:
UPDATE MY_Table
SET COL1 = case
when TRIM(COL1) IS NOT NULL then DBMS_RANDOM.STRING('A', DBMS_RANDOM.VALUE(10, 15))
else col1
end,
COL3 = case
when TRIM(COL3) IS NOT NULL then DBMS_RANDOM.STRING('A', DBMS_RANDOM.VALUE(8, 15))
else col3
end,
COL15 = case
when where TRIM(COL15) IS NOT NULL then DBMS_RANDOM.STRING('A', DBMS_RANDOM.VALUE(5, 15))
else col15
end
如果您有許多不滿足條件的行,添加where
條件可以加快速度
update my_table
set ....
where (TRIM(COL1) IS NOT NULL or
TRIM(COL3) IS NOT NULL or
TRIM(COL15) IS NOT NULL)
您可以使用動態 SQL,例如:
begin
for i in (select n,
case
when n = 1 then 'DBMS_RANDOM.STRING(''A'', DBMS_RANDOM.VALUE(10, 15))'
when n = 10 then '...',
...
else '...'
end as val
from (
select level as n
from dual
connect by level <= 91
) where n in (10, 20)
)
loop
execute immediate 'UPDATE MY_Table
SET COL' || i.n || '=' || i.val || '
where TRIM(COL' || i.n || ') IS NOT NULL';
end loop;
end;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.