【问题标题】:Exception for same data update相同数据更新的例外
【发布时间】:2012-10-16 13:41:38
【问题描述】:

在异常处理方面需要帮助。 如果我在运行此 UPDATE 脚本后运行它,但是当我运行相同的脚本两次或更多次时,我会收到以下错误 “更新了 1 行。已提交” 但这不行。 我想收到异常。 "注意:表格已经更新"

UPDATE FBTB_TXNLOG
SET txnstageid = '-1',
LOCKED = 'N',
where xrefid = 'FJB1229000056689';
commit;

【问题讨论】:

  • AND (locked <> 'N' OR txnstageid <> '-1') 添加到WHERE 子句并检查更新了多少行?

标签: sql oracle plsql oracle11g


【解决方案1】:

试试这个解决方案:

SET SERVEROUTPUT ON -- need for dbms_output.put_line()
declare 
  cnt int;
begin
  -- if data exists 
  SELECT count(1)  
  INTO   cnt
  FROM   FBTB_TXNLOG
  WHERE   txnstageid = '-1'
  and  LOCKED = 'N'
  and xrefid = 'FJB1229000056689';

 if (cnt > 0 ) 
 then  
   -- exists: display message
   dbms_output.put_line('Table is already updated');  
 else
   -- let's edit 
   UPDATE FBTB_TXNLOG
   SET txnstageid = '-1',
       LOCKED = 'N',
   where xrefid = 'FJB1229000056689';
   commit;
 end if; 
end;
/

【讨论】:

  • 嗨,当“if(cnt>0)”为假时,“else”部分运行,对。再次运行脚本而不做任何更改“if(cnt>0)”再次为假,脚本运行时没有异常。如果“if(cnt>0)”为真,那么它会抛出异常。请帮忙。再次感谢
  • 这很奇怪,因为它对我有用。您确定 select 语句和 update 语句中的参数相同吗?
  • 是的,已测试,参数相同但值不同。请在 select 和 update 语句中给出不同的值以伪造 if 条件。谢谢先生。
  • txnstageid,LOCKEDxrefid需要和上面一样更新和选择。
  • 很抱歉打扰你 :) 请忽略 FBTB_TXNLOG 表。让我们用简单的 HR 模式讨论。 SET serveroutput ON DECLARE cnt INT; BEGIN SELECT COUNT(1) INTO cnt FROM employees WHERE first_name='Steven' AND last_name ='King' AND employee_id ='100'; IF(cnt >0) THEN dbms_output.put_line('表已经更新'); ELSE 更新员工 SET first_name ='Steven' , last_name ='King' WHERE employee_id='100';犯罪;万一;结束;
猜你喜欢
  • 2021-04-26
  • 1970-01-01
  • 2015-01-02
  • 2017-06-29
  • 1970-01-01
  • 2014-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多