- 论坛徽章:
- 0
|
CREATE PROCEDURE REPORT.CSHEET_CO_SP_SEW03
(
INOUT pERRCDE INTEGER,
INOUT pERRDSC CHAR(96),
INOUT pFUNNAM CHAR(30),
INOUT pSQLSTATE CHAR(5)
)
LANGUAGE SQL
BEGIN
DECLARE SQLSTATE CHAR(5) DEFAULT '00000';
DECLARE SQLCODE INTEGER DEFAULT 0;
DECLARE SQLEOF INTEGER DEFAULT 0;
DECLARE SQLIGNORE INTEGER DEFAULT 0;
DECLARE mERRCDE CHAR(96);
--DECLARE mTIME VARCHAR(5000) DEFAULT '';
DECLARE mCONO DECIMAL(3,0);
DECLARE mFACI GRAPHIC(3) CCSID 13488;
DECLARE mSCHN DECIMAL(11,0);
DECLARE mHDPR GRAPHIC(15) CCSID 13488;
DECLARE mSTDT DECIMAL(8,0);
DECLARE lSTYL VARCHAR(20);
DECLARE lPLGR GRAPHIC( CCSID 13488;
DECLARE mPOLS VARCHAR(400) DEFAULT '';
DECLARE cNumFGC VARCHAR(1000);
DECLARE sNumFGC VARCHAR(1000);
DECLARE C1 CURSOR FOR
SELECT VHCONO,VHFACI,VHSCHN,
CASE WHEN MMCHCD IN (0,2) THEN
MMITNO
ELSE
MMHDPR
END VHHDPR,
MIN(VHSTDT) AS VHSTDT
FROM MVXCDTATAL.MWOHED
INNER JOIN MVXCDTATAL.MITMAS
ON VHCONO = MMCONO
AND VHPRNO = MMITNO
WHERE VHCONO = 100 AND VHFACI = 'TG1'
GROUP BY VHCONO,VHFACI,VHSCHN,
CASE WHEN MMCHCD IN (0,2) THEN
MMITNO
ELSE
MMHDPR
END
FOR READ ONLY;
DECLARE C2 CURSOR FOR
SELECT DISTINCT VOPLGR FROM MVXCDTATAL.MWOOPE
WHERE VOCONO = 100 AND VOFACI = mFACI AND VOPLGR LIKE '4%' AND VOSCHN = mSCHN AND VOPRNO LIKE lSTYL
FOR READ ONLY;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET SQLEOF = 1;
DECLARE CONTINUE HANDLER FOR SQLSTATE '24501' SET SQLIGNORE = 1;
DECLARE EXIT HANDLER FOR SQLSTATE 'XGOOK'
XHDLOK: LOOP
SET pSQLSTATE = '00000';
SET pERRCDE = 0;
SET pERRDSC = 'OK';
LEAVE XHDLOK;
END LOOP;
DECLARE EXIT HANDLER FOR SQLSTATE 'ERROR'
XHDLERROR: LOOP
SET pSQLSTATE = SQLSTATE;
SET pERRCDE = SQLCODE;
SET pERRDSC = 'ERR:' || rtrim(mERRCDE) || '->' || SQLSTATE ;
LEAVE XHDLERROR;
END LOOP;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
XHDLFATAL: LOOP
SET pSQLSTATE = SQLSTATE;
SET pERRCDE = SQLCODE;
SET pERRDSC = rtrim(mERRCDE) || '->' || SQLSTATE ;
LEAVE XHDLFATAL;
END LOOP;
SET mERRCDE = 'START AT ' || SUBSTR(CHAR(CURRENT TIMESTAMP),1,25) ;
SET pFUNNAM = 'REPORT.CSHEET_CO_SP_SEW';
SET pSQLSTATE = '00000';
SET pERRCDE = 0;
SET pERRDSC = '';
OPEN C1 ;
LP1: LOOP
SET SQLEOF = 0;
--SET mSPQT = 0 ;
SET mPOLS = '' ;
FETCH FROM C1 INTO mCONO, mFACI, mSCHN, mHDPR ,mSTDT ;
IF SQLEOF = 1 THEN
LEAVE LP1;
END IF;
--SET mTPDT = 0;
SET lSTYL = RTRIM(mHDPR)||'%';
OPEN C2 USING mFACI,mSCHN,lSTYL;
LP2: LOOP
SET SQLEOF = 0;
FETCH FROM C2 INTO lPLGR ;
IF SQLEOF = 1 THEN
LEAVE LP2;
END IF;
IF lPLGR IS NULL THEN
SET lPLGR = '';
END IF ;
IF RTRIM(mPOLS) = '' THEN
SET mPOLS = lPLGR ;
ELSE
SET mPOLS = RTRIM(mPOLS) || '/' || lPLGR ;
END IF;
END LOOP LP2;
CLOSE C2;
set mPOLS = RTRIM(mPOLS);
INSERT INTO REPORT.CSHEET_SC_SEW
VALUES (mCONO,mFACI,mSCHN,mHDPR,'MO',mSTDT,mPOLS);
END LOOP LP1;
CLOSE C1 ;
SIGNAL SQLSTATE 'XGOOK';
END
在WINSQL 中 , 创建无错误, 执行也成功。 但是WINSQL 总是返回一些信息:
This command did not return data, and it did not return any rows
Column 2: CWB0111 - A buffer passed to a system call is too small to hold return data
Column 3: CWB0111 - A buffer passed to a system call is too small to hold return data
Column 4: CWB0111 - A buffer passed to a system call is too small to hold return data
String data right truncation.
String data right truncation.
String data right truncation.
Error: Invalid cursor state. (State:24000, Native Code: 7546)
有那位达人知道什么原因吗? |
|