Hi,
I have a stored procedure that works fine with SQL server 2005.
I am having trouble making the same thing work with Oracle 9i.
The SP was modified to some extent; but I still get errors.
Here's what I am trying to do.
I execute a query and dump the resultset to a temporary table(#comp1).
Then I read the table and execute another query , the results of which are written to another temporary table.(#Details)
Finally, I need to write out the contents of the second temporary table to a report.(Crystal Report).
Can somebody please let me know how to go about this? I have listed the Procedure below.
Thank you.
CREATE OR REPLACE PROCEDURE TEST_PROC
(
p_p_OWNER IN VARCHAR2,
p_COMPANY_SEL_METHOD IN NUMBER,
p_COMPANY_CODE_OP1 IN VARCHAR2,
p_FIN_YEAR_METHOD IN NUMBER,
p_FIN_YEAR_BEGIN IN VARCHAR2,
p_FIN_YEAR_END IN VARCHAR2,
CUR_USER IN VARCHAR2
)
IS
CompanyCode VARCHAR2(3);
FinYear VARCHAR2(4);
FinName VARCHAR2(60);
SQLQuery VARCHAR(255);
SQLWhereClause VARCHAR(255);
SQLWhereClause1 VARCHAR(255);
SQLWhereClause2 VARCHAR(255);
SQLWhereClause3 VARCHAR(255);
SQLWhereClause4 VARCHAR(255);
SQLFinalQuery VARCHAR(255);
BEGIN
ETABLE := '#comp';
EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE #comp1
( COMP_CODE VARCHAR2(60) NULL
, FIN_YEAR VARCHAR2(4) NULL
, FIN_NAME VARCHAR2(60) NULL
) ON COMMIT PRESERVE ROWS' ;
EXCEPTION
WHEN TAB_ALREADY_EXISTS THEN NULL;
EXECUTE IMMEDIATE 'TRUNCATE TABLE #comp1' ;
WHEN OTHERS THEN
m_ERROR_NO := -20010;
m_ERROR_TEXT := 'Error while creating temp table #comp1. Error is : ';
RAISE;
--END;
--BEGIN
-- ETABLE := '#Details';
--EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE #Details
-- (
--p_OWNER VARCHAR2(8) NULL,
--PROCESSED_DATE DATE NULL,
--FIN_NAME VARCHAR2(60) NULL,
--COMP_CODE VARCHAR2(60) NULL,
--FIN_YEAR VARCHAR2(4) NULL
-- ) ON COMMIT PRESERVE ROWS' ;
--EXCEPTION
--WHEN TAB_ALREADY_EXISTS THEN NULL;
--EXECUTE IMMEDIATE 'TRUNCATE TABLE #Details' ;
--WHEN OTHERS THEN
--m_ERROR_NO := -20010;
--m_ERROR_TEXT := 'Error occured while creating temp table #Details . Error is : ';
--RAISE;
--END;
/* To test
exec TEST_PROC 'xyz',0,'001',0,'2005','20
07','user1
'
*/
BEGIN
SQLQuery := 'SELECT FIN.COMP_CODE,
DFIN.FIN_YEAR,
FIN.FIN_NAME
FROM
FIN
INNER JOIN
DFIN
ON
FIN.YR_CODE=DFIN.YR_CODE
AND
FIN.p_OWNER=DFIN.p_OWNER ';
SQLWhereClause1 := ' WHERE FIN.p_OWNER='''+ p_p_OWNER+'''';
IF p_COMPANY_SEL_METHOD = 1 THEN
SQLWhereClause2 := ' AND FIN.COMP_CODE = '''+p_COMPANY_CODE_OP1 +'''';
ELSE
SQLWhereClause2 := '';
END IF;
IF p_FIN_YEAR_METHOD = 1 THEN
SQLWhereClause3 := ' AND FIN_YEAR between '''+p_FIN_YEAR_BEGIN +''' and '''+p_FIN_YEAR_END +'''';
ELSEIF p_FIN_YEAR_METHOD = 2 THEN
SQLWhereClause3 := ' AND FIN_YEAR = '''+p_FIN_YEAR_BEGIN +'''' ;
ELSE
SQLWhereClause3 := '';
END IF;
SQLWhereClause4 :=' ORDER BY
FIN_YEAR,COMP_CODE';
SQLWhereClause := SQLWhereClause1 + SQLWhereClause2 + SQLWhereClause3 + SQLWhereClause4;
SQLFinalQuery := SQLQuery + SQLWhereClause;
--exec (SQLFinalQuery)
--END
INSERT INTO #comp1 ( COMP_CODE ,
FIN_YEAR,
FIN_NAME
)
EXEC (SQLFinalQuery);
--END
DECLARE RPT_CUR CURSOR local fast_forward FOR
SELECT COMP_CODE , FIN_YEAR , FIN_NAME FROM #comp1
OPEN RPT_CUR
FETCH NEXT FROM RPT_CUR INTO CompanyCode,FinYear ,FinName
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT #Details -- insert records into temporary Details table
SELECT
PALC.p_OWNER
, REP.PROCESSED_DATE
, FIN.DEFN_DESC
, FIN.CLOSE_PROC
, FIN.COMP_CODE
, DFIN.FIN_YEAR
FROM
PALC
INNER JOIN
FIN
ON
PALC.p_OWNER = FIN.p_OWNER
AND
PALC.YR_CODE = FIN.YR_CODE
INNER JOIN
REP
ON
REP.p_OWNER=RLP.p_OWNER
AND
REP.REQUEST_ID=RLP.REQUEST
_ID
AND
REP.REQUEST_TYPE=RLP.REQUE
ST_TYPE
INNER JOIN
DALC
ON
FIN.YR_CODE=DFIN.YR_CODE
AND
FIN.p_OWNER=DFIN.p_OWNER
AND
DFIN.FIN_YEAR = @FinYear
WHERE
PALC.p_OWNER = p_p_OWNER
AND PALC.FIN_YEAR = FinYear
AND FIN.COMP_CODE = CompanyCode
AND FIN.FLX_UPDATE_USER =CUR_USER
and PALC.PER_TYPE = 0
ORDER BY
PALC.QTR_NO,PALC.PER_NO,RE
P.PROCESSE
D_DATE
FETCH NEXT FROM RPT_CUR INTO CompanyCode,FinYear,FinNam
e
END
---fetching from cursor
CLOSE RPT_CUR
DEALLOCATE RPT_CUR
DROP TABLE #comp1
SELECT * FROM #Details
DROP TABLE #Details
--GRANT EXECUTE ON TEST_PROC TO PUBLIC
END
--go
I get the following errors :
LINE/COL ERROR
-------- --------------------------
----------
----------
----------
---------
95/8 PLS-00103: Encountered the symbol " p_FIN_YEAR_METHOD " when
expecting one of the following:
:= . ( @ % ;
106/13 PLS-00103: Encountered the symbol "#" when expecting one of the following:
( <an identifier> <a double-quoted delimited-identifier> table the
The symbol "#" was ignored.
111/1 PLS-00103: Encountered the symbol "EXEC" when expecting one of
LINE/COL ERROR
-------- --------------------------
----------
----------
----------
---------
the following:
( select values
The symbol "select" was substituted for "EXEC" to continue.
114/1 PLS-00103: Encountered the symbol "DECLARE" when expecting one of the following:
. ( , * % & - + / at mod rem <an identifier>
<a double-quoted delimited-identifier> <an exponent (**)> as
from ||