CREATE DEFINER=`root`@`%` PROCEDURE `lsd`.`PROC_GET_NEXT_PK`(IN AV_CLASSNAME VARCHAR(100), OUT AD_NEXT_ID NUMERIC(19,0)) BEGIN DECLARE LN_PK NUMERIC(19,0); DECLARE LN_USED_PK NUMERIC(19,0); DECLARE LV_COLNAME VARCHAR(60); DECLARE LV_COLTYPE VARCHAR(40); DECLARE LV_USER VARCHAR(40); DECLARE LI_COUNT INTEGER; DECLARE LS_SQL VARCHAR(500); DECLARE SQLCODE INTEGER DEFAULT 0; DECLARE RETSQLCODE INTEGER DEFAULT 0; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION, SQLWARNING, NOT FOUND SET RETSQLCODE = SQLCODE; UPDATE IEAI_ID SET IVALUE = IVALUE + 1 WHERE ICLASSNAME = AV_CLASSNAME; SET LI_COUNT = ROW_COUNT; IF LI_COUNT = 0 THEN INSERT INTO IEAI_ID ( ICLASSNAME, IVALUE ) VALUES ( AV_CLASSNAME, 1 ); COMMIT; END IF; SELECT IVALUE INTO LN_PK FROM IEAI_ID WHERE ICLASSNAME = AV_CLASSNAME; IF RETSQLCODE = 0 OR RETSQLCODE = 100 THEN COMMIT WORK; SET AD_NEXT_ID = LN_PK; ELSE ROLLBACK WORK; SET AD_NEXT_ID = NULL; END IF; COMMIT; END