中止执行存储过程

时间:2015-07-07 06:23:10

标签: stored-procedures db2

我有一个包含select查询的db2存储过程。如果select查询返回任何值,我想中止或失败此存储过程。请帮忙。

SET CURRENT SCHEMA = abc;
SET CURRENT PATH = abc,pqr;
CREATE OR REPLACE PROCEDURE abc.VALID_xyz ( )
  SPECIFIC SQL150421070712734
  LANGUAGE SQL
  NOT DETERMINISTIC
  EXTERNAL ACTION
  MODIFIES SQL DATA
  CALLED ON NULL INPUT
  INHERIT SPECIAL REGISTERS
  OLD SAVEPOINT LEVEL
begin
DECLARE C1 CURSOR WITH RETURN
            FOR select * from xy_table;           
open C1;    
RETURN;
END;
SET CURRENT SCHEMA = abc;

如果xy_table有任何行,我需要使这个存储过程失败。

1 个答案:

答案 0 :(得分:2)

SIGNAL命令可以触发预定义的或自定义的SQLSTATE,它将中止当前的SQL过程(或SQL语句的原子块),就好像发生了实际错误一样。

SET CURRENT SCHEMA = abc;
SET CURRENT PATH = abc,pqr;

--#SET TERMINATOR @
CREATE OR REPLACE PROCEDURE abc.valid_xyz()
SPECIFIC valid_xyz
NO EXTERNAL ACTION
LANGUAGE SQL
BEGIN
    IF EXISTS ( SELECT 1 FROM xy_table FETCH FIRST ROW ONLY )
    THEN
        SIGNAL SQLSTATE '75002' 
           SET MESSAGE_TEXT = 
           'Table XY_TABLE contained data when it was expected to be empty.';
     END IF;
END@
--#SET TERMINATOR ;

CALL valid_xyz();

SQL0438N  Application raised error or warning with diagnostic text: 
"Table XY_TABLE contained data when it was expected to be empty.".  SQLSTATE=75002