Stored procedures 中止存储过程的执行
我有一个db2存储过程,其中包含一个select查询。如果select查询返回任何值,我想中止或使此存储过程失败。请帮忙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
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过程编译器知道,通过指定
无外部操作
而不是更谨慎的默认值外部操作
,这将有所帮助。