Looking for a better way to implement this stored procedure. The issue is
that at the end of the procedure, when you try to drop the temp table after
you open the cursor, you get an error stating can't perform that action
because there's a pending operation on the temp table (the cursor reading it
I assume)
And if you close the cursor in order to be able to drop the temp table, you
destroy the result table.
If anyone can think of a better way to implement this procedure without the
need of a temp table, I'd appreciate any ideas.
Thanks in advance!
CREATE PROCEDURE AIM.GetRetrieva lImageDetail (IN decAIMRetrieval ID
DECIMAL(13,0))
------------------------------------------------------------------------
-- SQL Stored Procedure
-- Original Author Date: April 7, 2004
-- Author: Anthony
-- Returns Image detail information for an individual AIMRetrieval.
--
-- April 14, 2004:
-- Removed STATUS as a field being returned from the AIMRetrievedIte m Table
-- Changed AvailableFlag from 'Y' and 'N' to 1 and 2 per Stephanie's code.
--
------------------------------------------------------------------------
LANGUAGE SQL
RESULT SETS 1
P1: BEGIN
DECLARE GLOBAL TEMPORARY TABLE RetrievedItem
(AIMRETRIEVEDIT EMID DECIMAL(13,0),
ARCHIVERETRIEVA LID DECIMAL(13, 0),
AIMDOCUMENTID VARCHAR(256),
ARCHIVEDOCUMENT ID VARCHAR(124),
CAPTUREDATE DATE,
ROUTINGTRANSITN UMBER VARCHAR(9),
MICRACCOUNTNUMB ER VARCHAR(24),
POSTINGACCOUNTN UMBER VARCHAR(24),
LOCATION VARCHAR(24),
SERIALNUMBER VARCHAR(20),
AMOUNT DECIMAL(13, 2),
ITEMTYPE VARCHAR(20),
SEQUENCENUMBER VARCHAR(24),
SORRYDOCINDICAT OR VARCHAR(20),
APPLICATIONID VARCHAR(20),
CREDITDEBITFLAG VARCHAR(5),
IMAGELENGTH INTEGER,
AVAILABLEFLAG INTEGER
) WITH REPLACE;
BEGIN
DECLARE SELECT_HIGHLEVE L CURSOR WITH RETURN FOR
SELECT
AIM.AIMRETRIEVA L.DESCRIPTION, AIM.AIMRETRIEVA L.AIMRETRIEVALR ECEIPT,
AIM.STATUS.STAT US
FROM
AIM.AIMRETRIEVA L,
AIM.STATUS
WHERE
AIM.AIMRETRIEVA L.STATUSID = AIM.STATUS.STAT USID
AND decAIMRetrieval ID = AIM.AIMRetrieva l.AIMRetrievalI D;
DECLARE SELECT_CURSOR CURSOR WITH RETURN FOR
SELECT * FROM SESSION.Retriev edItem;
INSERT INTO SESSION.Retriev edItem
(
AIMRETRIEVEDITE MID ,
ARCHIVERETRIEVA LID ,
AIMDOCUMENTID ,
ARCHIVEDOCUMENT ID ,
CAPTUREDATE ,
ROUTINGTRANSITN UMBER ,
MICRACCOUNTNUMB ER ,
POSTINGACCOUNTN UMBER ,
LOCATION ,
SERIALNUMBER ,
AMOUNT ,
ITEMTYPE ,
SEQUENCENUMBER ,
SORRYDOCINDICAT OR ,
APPLICATIONID ,
CREDITDEBITFLAG ,
IMAGELENGTH
)
SELECT
AIM.AIMRETRIEVE DITEM.AIMRETRIE VEDITEMID,
AIM.ARCHIVERETR IEVAL.ARCHIVERE TRIEVALID, AIM.AIMRETRIEVE DITEM.AIMDOCUME NTID,
AIM.AIMRETRIEVE DITEM.ARCHIVEDO CUMENTID, AIM.AIMRETRIEVE DITEM.CAPTUREDA TE,
AIM.AIMRETRIEVE DITEM.ROUTINGTR ANSITNUMBER,
AIM.AIMRETRIEVE DITEM.MICRACCOU NTNUMBER,
AIM.AIMRETRIEVE DITEM.POSTINGAC COUNTNUMBER,
AIM.AIMRETRIEVE DITEM.LOCATION, AIM.AIMRETRIEVE DITEM.SERIALNUM BER,
AIM.AIMRETRIEVE DITEM.AMOUNT, AIM.AIMRETRIEVE DITEM.ITEMTYPE,
AIM.AIMRETRIEVE DITEM.SEQUENCEN UMBER, AIM.AIMRETRIEVE DITEM.SORRYDOCI NDICATOR,
AIM.AIMRETRIEVE DITEM.APPLICATI ONID,
AIM.AIMRETRIEVE DITEM.CREDITDEB ITFLAG,
Length(AIM.AIMR ETRIEVEDITEM.Im ageFront)
FROM
AIM.AIMRETRIEVA L,
AIM.STATUS,
AIM.AIMRETRIEVE DITEM,
AIM.ARCHIVERETR IEVAL,
AIM.ARCHIVETYPE
WHERE
AIM.AIMRETRIEVA L.STATUSID = AIM.STATUS.STAT USID
AND AIM.ARCHIVERETR IEVAL.ARCHIVERE TRIEVALID =
AIM.AIMRETRIEVE DITEM.ARCHIVERE TRIEVALID
AND AIM.AIMRETRIEVA L.AIMRETRIEVALI D = AIM.ARCHIVERETR IEVAL.AIMRETRIE VALID
AND AIM.ARCHIVERETR IEVAL.ARCHIVEID = AIM.ARCHIVETYPE .ARCHIVEID
AND AIM.ARCHIVETYPE .ARCHIVETYPE = 'D'
AND AIM.AIMRETRIEVA L.AIMRETRIEVALI D = decAIMRetrieval ID;
UPDATE SESSION.Retriev edItem SET AVAILABLEFLAG = 2 WHERE
SESSION.Retriev edItem.ImageLen gth IS NULL OR
SESSION.Retriev edItem.ImageLen gth = 0;
UPDATE SESSION.Retriev edItem SET AVAILABLEFLAG = 1 WHERE
SESSION.Retriev edItem.ImageLen gth IS NOT NULL OR
SESSION.Retriev edItem.ImageLen gth > 0;
OPEN SELECT_HIGHLEVE L;
OPEN SELECT_CURSOR;
--CLOSE SELECT_CURSOR;
--DROP TABLE SESSION.Retriev edItem;
--CLOSE SELECT_HIGHLEVE L;
--CLOSE SELECT_CURSOR;
--BEGIN
--DROP TABLE SESSION.Retriev edItem;
--END;
END;
END P1
_______________ ___
Anthony Robinson
that at the end of the procedure, when you try to drop the temp table after
you open the cursor, you get an error stating can't perform that action
because there's a pending operation on the temp table (the cursor reading it
I assume)
And if you close the cursor in order to be able to drop the temp table, you
destroy the result table.
If anyone can think of a better way to implement this procedure without the
need of a temp table, I'd appreciate any ideas.
Thanks in advance!
CREATE PROCEDURE AIM.GetRetrieva lImageDetail (IN decAIMRetrieval ID
DECIMAL(13,0))
------------------------------------------------------------------------
-- SQL Stored Procedure
-- Original Author Date: April 7, 2004
-- Author: Anthony
-- Returns Image detail information for an individual AIMRetrieval.
--
-- April 14, 2004:
-- Removed STATUS as a field being returned from the AIMRetrievedIte m Table
-- Changed AvailableFlag from 'Y' and 'N' to 1 and 2 per Stephanie's code.
--
------------------------------------------------------------------------
LANGUAGE SQL
RESULT SETS 1
P1: BEGIN
DECLARE GLOBAL TEMPORARY TABLE RetrievedItem
(AIMRETRIEVEDIT EMID DECIMAL(13,0),
ARCHIVERETRIEVA LID DECIMAL(13, 0),
AIMDOCUMENTID VARCHAR(256),
ARCHIVEDOCUMENT ID VARCHAR(124),
CAPTUREDATE DATE,
ROUTINGTRANSITN UMBER VARCHAR(9),
MICRACCOUNTNUMB ER VARCHAR(24),
POSTINGACCOUNTN UMBER VARCHAR(24),
LOCATION VARCHAR(24),
SERIALNUMBER VARCHAR(20),
AMOUNT DECIMAL(13, 2),
ITEMTYPE VARCHAR(20),
SEQUENCENUMBER VARCHAR(24),
SORRYDOCINDICAT OR VARCHAR(20),
APPLICATIONID VARCHAR(20),
CREDITDEBITFLAG VARCHAR(5),
IMAGELENGTH INTEGER,
AVAILABLEFLAG INTEGER
) WITH REPLACE;
BEGIN
DECLARE SELECT_HIGHLEVE L CURSOR WITH RETURN FOR
SELECT
AIM.AIMRETRIEVA L.DESCRIPTION, AIM.AIMRETRIEVA L.AIMRETRIEVALR ECEIPT,
AIM.STATUS.STAT US
FROM
AIM.AIMRETRIEVA L,
AIM.STATUS
WHERE
AIM.AIMRETRIEVA L.STATUSID = AIM.STATUS.STAT USID
AND decAIMRetrieval ID = AIM.AIMRetrieva l.AIMRetrievalI D;
DECLARE SELECT_CURSOR CURSOR WITH RETURN FOR
SELECT * FROM SESSION.Retriev edItem;
INSERT INTO SESSION.Retriev edItem
(
AIMRETRIEVEDITE MID ,
ARCHIVERETRIEVA LID ,
AIMDOCUMENTID ,
ARCHIVEDOCUMENT ID ,
CAPTUREDATE ,
ROUTINGTRANSITN UMBER ,
MICRACCOUNTNUMB ER ,
POSTINGACCOUNTN UMBER ,
LOCATION ,
SERIALNUMBER ,
AMOUNT ,
ITEMTYPE ,
SEQUENCENUMBER ,
SORRYDOCINDICAT OR ,
APPLICATIONID ,
CREDITDEBITFLAG ,
IMAGELENGTH
)
SELECT
AIM.AIMRETRIEVE DITEM.AIMRETRIE VEDITEMID,
AIM.ARCHIVERETR IEVAL.ARCHIVERE TRIEVALID, AIM.AIMRETRIEVE DITEM.AIMDOCUME NTID,
AIM.AIMRETRIEVE DITEM.ARCHIVEDO CUMENTID, AIM.AIMRETRIEVE DITEM.CAPTUREDA TE,
AIM.AIMRETRIEVE DITEM.ROUTINGTR ANSITNUMBER,
AIM.AIMRETRIEVE DITEM.MICRACCOU NTNUMBER,
AIM.AIMRETRIEVE DITEM.POSTINGAC COUNTNUMBER,
AIM.AIMRETRIEVE DITEM.LOCATION, AIM.AIMRETRIEVE DITEM.SERIALNUM BER,
AIM.AIMRETRIEVE DITEM.AMOUNT, AIM.AIMRETRIEVE DITEM.ITEMTYPE,
AIM.AIMRETRIEVE DITEM.SEQUENCEN UMBER, AIM.AIMRETRIEVE DITEM.SORRYDOCI NDICATOR,
AIM.AIMRETRIEVE DITEM.APPLICATI ONID,
AIM.AIMRETRIEVE DITEM.CREDITDEB ITFLAG,
Length(AIM.AIMR ETRIEVEDITEM.Im ageFront)
FROM
AIM.AIMRETRIEVA L,
AIM.STATUS,
AIM.AIMRETRIEVE DITEM,
AIM.ARCHIVERETR IEVAL,
AIM.ARCHIVETYPE
WHERE
AIM.AIMRETRIEVA L.STATUSID = AIM.STATUS.STAT USID
AND AIM.ARCHIVERETR IEVAL.ARCHIVERE TRIEVALID =
AIM.AIMRETRIEVE DITEM.ARCHIVERE TRIEVALID
AND AIM.AIMRETRIEVA L.AIMRETRIEVALI D = AIM.ARCHIVERETR IEVAL.AIMRETRIE VALID
AND AIM.ARCHIVERETR IEVAL.ARCHIVEID = AIM.ARCHIVETYPE .ARCHIVEID
AND AIM.ARCHIVETYPE .ARCHIVETYPE = 'D'
AND AIM.AIMRETRIEVA L.AIMRETRIEVALI D = decAIMRetrieval ID;
UPDATE SESSION.Retriev edItem SET AVAILABLEFLAG = 2 WHERE
SESSION.Retriev edItem.ImageLen gth IS NULL OR
SESSION.Retriev edItem.ImageLen gth = 0;
UPDATE SESSION.Retriev edItem SET AVAILABLEFLAG = 1 WHERE
SESSION.Retriev edItem.ImageLen gth IS NOT NULL OR
SESSION.Retriev edItem.ImageLen gth > 0;
OPEN SELECT_HIGHLEVE L;
OPEN SELECT_CURSOR;
--CLOSE SELECT_CURSOR;
--DROP TABLE SESSION.Retriev edItem;
--CLOSE SELECT_HIGHLEVE L;
--CLOSE SELECT_CURSOR;
--BEGIN
--DROP TABLE SESSION.Retriev edItem;
--END;
END;
END P1
_______________ ___
Anthony Robinson
Comment