???????????

解决方案 »

  1.   

     你要实现的功能是什么? 存储过程中?触发器中?还是你自己的java中?问题说明越详细,回答也会越准确!参见如何提问。(提问的智慧
      

  2.   


    DELIMITER $$USE `et`$$CREATE
        TRIGGER `testref` BEFORE DELETE ON `test1` 
        FOR EACH ROW BEGIN  
       
    UPDATE test4 SET b4 = b4- OLD.a1 WHERE a4 =OLD.a1;  
    END;
    $$
    DELIMITER ;
    当b4<0时就抛出异常,怎么写啊????
      

  3.   

    mysql好像没有oracle的raise 语法,关注一下
      

  4.   


    很简单 ,写个错误的语句就行了。 参考下贴。http://blog.csdn.net/ACMAIN_CHM/archive/2009/07/25/4380183.aspx
    MySQL 中如何在触发器里中断记录的插入或更新?
      

  5.   

    ·         SQLWARNING是对所有以01开头的SQLSTATE代码的速记。·         NOT FOUND是对所有以02开头的SQLSTATE代码的速记。·         SQLEXCEPTION是对所有没有被SQLWARNING或NOT FOUND捕获的SQLSTATE代码的速记。除了SQLSTATE值,MySQL错误代码也不被支持。例如: mysql> CREATE TABLE test.t (s1 int,primary key (s1));
    Query OK, 0 rows affected (0.00 sec)
     
    mysql> delimiter //
     
    mysql> CREATE PROCEDURE handlerdemo ()
        -> BEGIN
        ->   DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @x2 = 1;
        ->   SET @x = 1;
        ->   INSERT INTO test.t VALUES (1);
        ->   SET @x = 2;
        ->   INSERT INTO test.t VALUES (1);
        ->   SET @x = 3;
        -> END;
        -> //
    Query OK, 0 rows affected (0.00 sec)
     
    mysql> CALL handlerdemo()//
    Query OK, 0 rows affected (0.00 sec)
     
    mysql> SELECT @x//
        +------+
        | @x   |
        +------+
        | 3    |
        +------+
        1 row in set (0.00 sec)
    注意到,@x是3,这表明MySQL被执行到程序的末尾。如果DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @x2 = 1; 这一行不在,第二个INSERT因PRIMARY KEY强制而失败之后,MySQL可能已经采取默认(EXIT)路径,并且SELECT @x可能已经返回2。 
      

  6.   

    DROP PROCEDURE IF EXISTS sp_call_jobs;
    CREATE PROCEDURE sp_call_jobs()
        NOT DETERMINISTIC
        SQL SECURITY DEFINER
        COMMENT ''
    BEGIN
    declare _row,_err,_count int default 0;
    DECLARE CONTINUE  HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND set _err=1;
    while _row<3 DO
      START TRANSACTION;
         insert into t1(cond_val)values(null);
      COMMIT;
     if _err=1 then
       set _count=_count+1;
     end if;
     set _row=_row+1;
    end while;
    select _count;
    END;