Stored procedures 中止存储过程的执行

Stored procedures 中止存储过程的执行,stored-procedures,db2,Stored Procedures,Db2,我有一个db2存储过程,其中包含一个select查询。如果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 MODI

我有一个db2存储过程,其中包含一个select查询。如果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_表有任何行,我需要使此存储过程失败。

命令可以触发预定义或自定义的SQLSTATE,该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

如果您的过程没有实际操作DB2之外的东西(例如JVM中的Java对象),那么如果您让DB2过程编译器知道,通过指定
无外部操作
而不是更谨慎的默认值
外部操作
,这将有所帮助。