中止存储过程的执行

abort execution of a stored proc

我有一个包含 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 有任何行,我需要使这个存储过程失败。

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