| 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 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
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
![]() |
![]() |