【问题标题】:PL/SQL how to skip execution of script if similar value if found in the Table?如果在表中找到类似的值,PL/SQL 如何跳过脚本的执行?
【发布时间】:2016-02-02 03:00:25
【问题描述】:

我想创建一个 Oracle PL/SQL 插入脚本。这只是一次插入语句,如果脚本被执行多次并且Table 中有类似的值可用,它应该跳过执行。

现在如果脚本再次执行,我希望它成功完成。但是,如果表中有类似的记录,我不想输入重复的数据。

这是我的脚本:

Set SERVEROUTPUT ON

BEGIN

INSERT INTO TableA
        (First,
     Last,
     Address,
     City,
     State,
     Zip
         )

VALUES
       ('Alex',
    'Roark',
    '25 El Camino Real',
    'San Roman',
    'CA',
    '94008'
       );

INSERT INTO TableA
        (First,
     Last,
     Address,
     City,
     State,
     Zip
         )

VALUES
       ('William',
    'Chan',
    '3700 Baltimore Ave',
    'Detroit',
    'MI',
    '21003'
       );

INSERT INTO TableA
        (First,
     Last,
     Address,
     City,
     State,
     Zip
         )

VALUES
       ('Petty',
    'Garg',
    '1980 Fernando Ct',
    'Austin',
    'TX',
    '85002'
       );

INSERT INTO TableA
        (First,
     Last,
     Address,
     City,
     State,
     Zip
         )

VALUES
       ('Thomas',
    'Gregory',
    '56 E Washington Blvd',
    'Philadelphia',
    'PA',
    '19803'
       );

DBMS_OUTPUT.PUT_LINE('Insert Completed Successfully');

COMMIT;

EXCEPTION

 WHEN dup_val_on_index

  THEN  ROLLBACK;

END;
/

Set serveroutput off;

【问题讨论】:

  • 你有什么问题?
  • 你用你的脚本试过了吗?
  • 如何将dup_val_on_index 的异常处理程序从rollback; 更改为null;
  • 如何在你的表中实现一个唯一的主键,或者一个可以使记录与其他记录区分开来的列,如 id?这样您就可以对其实现唯一索引,然后您就可以实际使用 dup_val_on_index 异常

标签: sql oracle plsql plsqldeveloper


【解决方案1】:

您的问题无法理解,因为您提供的代码在这种情况下不起作用。 在您的代码中,一旦您遇到异常,您的整个过程将结束,其余的插入语句将没有过程。

您应该在这里执行一些步骤 - 1)在表上创建 PK 或唯一键,以便您可以在某些基础上区分行。 2) 在插入任何值时,请检查该列值是否您要插入的值已存在于表中,然后继续。

尝试使用上述步骤进行更改。如果您觉得有任何问题,请分享。

【讨论】:

  • 感谢 Udit。我明白我需要在其中一个领域创建 PK。只是想清楚我只想创建一个时间脚本来加载表。如果有人错误地重新运行该脚本,它仍然会成功完成,但不会插入任何新记录或不影响先前插入的记录。
猜你喜欢
  • 2012-08-19
  • 2018-08-05
  • 1970-01-01
  • 1970-01-01
  • 2014-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多