简体   繁体   English

用于增强表的多个更新语句的 PL/SQL 过程

[英]PL/SQL Procedure for enhancing multiple update statements for a Table

I need to update one of the tables in my the Database with random values, so that I have written multiple update statements but its taking a lot of time for execution, I need to update only 15 columns in the table containing 100 of Columns.我需要用随机值更新我的数据库中的一个表,以便我编写了多个更新语句,但是执行需要很多时间,我只需要更新包含 100 列的表中的 15 列。 Could someone help me to write a PL/SQL procedure for the following statements.有人可以帮我为以下语句编写一个 PL/SQL 过程。 I have 15 columns to update.我有 15 列要更新。 I have written with ID number of the column to be update with the variable value field我已经写了要使用变量值字段更新的列的 ID 号

Thank you in Advance.先感谢您。

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; 

You don't need 15 update statements, you can do this in a single statement:您不需要 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

If you have many rows that do not satisfy the conditions, adding a where condition could speed up things如果您有许多不满足条件的行,添加where条件可以加快速度

update my_table
  set ....
where (TRIM(COL1) IS NOT NULL or
       TRIM(COL3) IS NOT NULL or
       TRIM(COL15) IS NOT NULL)

You can use dynamic SQL like:您可以使用动态 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM