Einzelnen Beitrag anzeigen

Robert_G
(Gast)

n/a Beiträge
 
#5

Re: * in Stored Procedure [Interbase]

  Alt 6. Sep 2004, 08:58
Zeig' mal den Code drumrum. Ein SELECT-Statement ist ja noch keine Prozedur.
Wenn du einen Haufe Daten in der Tabelle ändern willst: Deklariere es als Cursor, schiebe die Daten in Collections und mache etwas damit. Danach kannst du die per BULK DML ziemlich fix zurückschreiben:
SQL-Code:
create or replace procedure SenselessSample(pC in varchar2) is

  cursor curTabl8(iC in varchar2) is
    SELECT PK
          ,A
          ,B
    FROM Table8
    WHERE C = iC;

  type IntTab is table of integer;
  type ShortChrTab is table of varchar2(255);
  type LongChrTab is table of varchar2(2000);

  lPK IntTab;
  lA ShortChrTab;
  lB LongChrTab;

  i integer;
begin
  -- hole Daten
  open curTabl8(pC);
  fetch curTabl8 bulk collect
    INTO lPK, lA, lB;
  close curTabl8;

  -- mache was damit
  for i in lPK.first .. lPK.last loop
    lA(i) := lA(i) || ' miep!';
    lB(i) := lB(i) || ' ' || lA(i);
  end loop;

  -- schiebe sie per BULK DML zurück
  forall i in lPK.first .. lPK.last
    UPDATE Table8 u
    SET u.A = lA(i)
          ,u.B = lB(i)
    WHERE PK = lPK(i);

end;
  Mit Zitat antworten Zitat