代码之家  ›  专栏  ›  技术社区  ›  JavaSheriff

将随机字符串值更新到oracle表中的现有记录

  •  2
  • JavaSheriff  · 技术社区  · 6 年前


    select  to_char(TO_DATE('2003/07/09', 'yyyy/mm/dd') + trunc(dbms_random.value(0,(TO_DATE('2003/07/09', 'yyyy/mm/dd')-TO_DATE('2018/07/09', 'yyyy/mm/dd')+1))),
                             'YYYY-MM') rDate   from dual
    

    但出于某种原因,我的更新脚本正在为所有记录设置相同的值

    CREATE TABLE tmp_del_me (    
        name varchar(255),
        year_month_started varchar(255)
    );
    
    insert into tmp_del_me (name)VALUES ('a');
    insert into tmp_del_me (name)VALUES ('b');
    insert into tmp_del_me (name)VALUES ('c');
    insert into tmp_del_me (name)VALUES ('d');
    
    
    UPDATE tmp_del_me
    SET  year_month_started = (
                        select  to_char(TO_DATE('2003/07/09', 'yyyy/mm/dd') + trunc(dbms_random.value(0,(TO_DATE('2003/07/09', 'yyyy/mm/dd')-TO_DATE('2018/07/09', 'yyyy/mm/dd')+1))),
                         'YYYY-MM') rDate   from dual
                         )
                /
    
    drop table tmp_del_me;
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   Derviş Kayımbaşıoğlu    6 年前

    您的内部查询只执行一次,并且始终为其指定相同的值 year_month_started 专栏。

    如果不使用子查询,则DML将按预期工作。

    UPDATE T1
    SET COL1 = 
      to_char(TO_DATE('2003/07/09', 'yyyy/mm/dd') + 
         trunc(dbms_random.value(0,(TO_DATE('2003/07/09', 'yyyy/mm/dd')-
         TO_DATE('2018/07/09', 'yyyy/mm/dd')+1))), 'YYYY-MM') ;
    

    http://sqlfiddle.com/#!4/43bb3f