Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.server -> Re: PRO*C & PL/SQL Stored procedure

Re: PRO*C & PL/SQL Stored procedure

From: Karl R. <kreitsch_at_zdnetonebox.com>
Date: 2000/05/03
Message-ID: <29281c16.d542b9ab@usw-ex0103-024.remarq.com>#1/1

Hello David
Here an example, but you can see that too in the Oracle-Doc Bye!

    EXEC SQL BEGIN DECLARE SECTION;

	    int HostDimId [SQL_ROW_SET_SIZE];
	    int HostZeitId [SQL_ROW_SET_SIZE];
		int HostModellId[SQL_ROW_SET_SIZE];
        int HostAgentId[SQL_ROW_SET_SIZE];
		
		int HostExistingDimId [SQL_ROW_SET_SIZE];

		int dimension;

    EXEC SQL END DECLARE SECTION;                  dimension = HowMany;          

        // Das ist klasse! Auch weniger Sätze als SQL_ROW_SET_SIZE können bearbeitet werden

	EXEC SQL ARRAYLEN HostDimId (dimension);
	EXEC SQL ARRAYLEN HostZeitId (dimension);
	EXEC SQL ARRAYLEN HostModellId (dimension);
	EXEC SQL ARRAYLEN HostAgentId (dimension);
	EXEC SQL ARRAYLEN HostExistingDimId (dimension);

	try	{
		
		//KRE.MOD.TUNING :  HostVar's füllen
		for ( iRow = 0; iRow < dimension; iRow ++ )	{
			HostDimId[iRow]	= DimId[iRow];
			HostZeitId[iRow]	= ZeitId[iRow];
			HostModellId[iRow]	= ModellId[iRow];
			HostAgentId[iRow]	= AgentId[iRow];
		}


		/** KRE.TUNING Mit PLSQL-BLOCK
				um mehr Logik reinstecken zu
können, die notwendig ist um revd korrekt zu verarbeiten
				Tritt in REVD ein Dup-key auf
dann muss die REVID selektiert werden
				und im Array HostExistingDimId
zurückgegeben werden
				für den ArrayInsert  auf REVV u.
REVF
		*/
		EXEC SQL EXECUTE
		DECLARE
			TYPE HostDimIdTab IS TABLE OF INTEGER
INDEX BY BINARY_INTEGER;
			TYPE HostZeitIdTab IS TABLE OF INTEGER
INDEX BY BINARY_INTEGER;
			TYPE HostModellIdTab IS TABLE OF INTEGER
INDEX BY BINARY_INTEGER;
			TYPE HostExistingDimId IS TABLE OF
INTEGER INDEX BY BINARY_INTEGER;
			TYPE HostAgentIdTab IS TABLE OF INTEGER
INDEX BY BINARY_INTEGER;
				FOR nRow IN 1..MaxRow LOOP
					BEGIN
					
	LReturnExistingID := FALSE;
						INSERT INTO revd
	(
							id,
							fk_revm,
							fk_revz,
							fk_agen
						
	)
						VALUES	(
						
	itHostDimIdTab(nRow),
						
	itHostModellIdTab(nRow),
						
	itHostZeitIdTab(nRow),
						
	itHostAgentIdTab(nRow)
							);

					EXCEPTION
						WHEN

DUP_VAL_ON_INDEX THEN                                                 
	LReturnExistingID := TRUE;
					END;
					
					IF LReturnExistingID THEN
						SELECT
							id
						INTO
						
	itHostExistingDimId( nRow )
						FROM
							REVD
						WHERE
							fk_revz
= itHostZeitIdTab(nRow) AND
							fk_revm
= itHostModellIdTab(nRow) AND
							fk_agen
= itHostAgentIdTab(nRow)
							;
					ELSE
					
	itHostExistingDimId( nRow ) := 0;
					END IF;

				END LOOP;
			END;
		BEGIN  -- Jetzt gehts endlich los!!
			
			PINSERT_REVD(
			:HostDimId,
			:HostZeitId,
			:HostModellId,
			:HostAgentId,
			:HostExistingDimId,
			:dimension
			);

		END; -- Ende der Action
		END-EXEC;


Karl Reitschuster
Senior Consultant CSC Ploenzke AG
Oracle Databases, Implementation, Performance-Tuning <!Jesus is Lord!>
* Sent from RemarQ http://www.remarq.com The Internet's Discussion Network * The fastest and easiest way to search and participate in Usenet - Free! Received on Wed May 03 2000 - 00:00:00 CDT

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US