首页 > 解决方案 > 通过从另一个中选择全部插入到表中,当语句为真时更改 PL/SQL 中的值

问题描述

所以我想做的是把一个表的值(全部)插入一个新的表中,当它遇到任何值时,文章标识符(sa.art_ident)用单词 bighead 和 sa.art_moddate 替换它替换为当前系统时间。当我尝试运行它时,它会告诉我缺少右括号...请帮助

PROCEDURE p_copier_one IS

     BEGIN
    INSERT INTO article_new
      (
        SELECT * FROM article_old sa
          CASE 
            WHEN sa.art_ident='%' THEN
            sa.art_ident = 'Bighead'
          END
        CASE
          WHEN sa.art_moddate='%' THEN
          sa.art_moddate = to_date(
                           '02/04/2012' 
                           ,'DD/MM/YYYY')
                           ,trunc(SYSDATE)

         END
          );



END p_copier_one;

标签: oracleselectplsqlinsertcase-when

解决方案


欢迎来到 SO。您需要执行如下所示的操作。内联阅读我的评论。

CREATE OR REPLACE PROCEDURE p_copier_one
IS
BEGIN
  ---List down all your columns here. Although its option to mention your table column but its good practise. 
    INSERT INTO article_new (
        col1,
        col2,
        col3,
        col4,
        col5
    )
        SELECT col1,
               col2,
               --Put your case here
               CASE
                WHEN sa.art_ident = '%' THEN 'Bighead'
               END   col3,
               CASE
                WHEN sa.art_moddate = '%' THEN TO_DATE('02/04/2012','DD/MM/YYYY')
               END   col4,
               trunc(SYSDATE) col5
        FROM article_old sa;
COMMIT;        
END;

推荐阅读