Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.server -> Re: PRO*C & PL/SQL Stored procedure
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;
// 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 INTEGERINDEX 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
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