Einzelnen Beitrag anzeigen
Alt 05.06.2006, 22:22   #3
watchdog
Newbie
 
Registriert seit: 14.10.2002
Beiträge: 3


Standard

Punkt 1: In nem PL/SQL-Block musst jedenfalls in ne Variable oder in nen Record selektieren, sonst wird das nix. Das Ergebnis muss ja irgendwo rein ;-). Nachdem ja evt. mehr als 1 Record zurückkommen kann, solltest du einen cursor bzw. ne cursor-for-loop verwenden.

Zu Deinem Prob:
Also ich würde sagen, Du machst es entweder mit flags so wie du's vorgeschlagen hast oder du machst Unterblöcke

Code:
DECLARE
  v_succ   varchar2(5) := 'START';
  v_result varchar2(1);

  cursor c1 is
    select '1' from dual;
BEGIN
  ----------------------
  -- Sub-Programmblock 1
  ----------------------
  BEGIN
    select '*' into v_result from bla1 where x='y';    
  EXCEPTION
    when NO_DATA_FOUND then
      dbms_output.put_line('in bla1 nix gefunden');
  END;

  --> Weiter in der Verarbeitung

  ----------------------
  -- Sub-Programmblock 2
  ----------------------
  BEGIN
    select '*' into v_result from bla2 where x='z';
  EXCEPTION
    when NO_DATA_FOUND then
      dbms_output.put_line('in bla2 nix gefunden');  
  END;

  --> Weiter bei der restlichen Verarbeitung

  ------------------------------------
  -- NO_DATA_FOUND => äußere Exception
  ------------------------------------
  v_succ := 'bla3';
  select * into v_result from bla3 where x='z';

  ------------------
  -- cursor-Beispiel
  ------------------
  open c1;
    fetch c1 into v_result;
    if c1%FOUND then
      dbms_output.put_line('Gefunden: '||v_result);
    else
      -- c1%NOTFOUND
      dbms_output.put_line('Nix gefunden');
      -- Wenn gewünscht hier definierten Fehler raisen
    end if;
  close c1;

EXCEPTION
  when NO_DATA_FOUND then
    dbms_output.put_line('Programmabbruch no_data_found bei: '||v_succ);

  when OTHERS then
    dbms_output.put_line('Undefinierter Verarbeitungsfehler: '||SQLERRM);
END;
Sorry, is ab bissl lang geworden, hoffe es passt alles. Hab schon länger nix mehr mit PL/SQL gemacht.

Kommt halt drauf an was du brauchst (weiter in Verarbeitung oder abbrechen). Natürlich kann man auch alles auslagern, zentral abfangen, mit cursor-Attributen (found, notfound) lösen - mehrere Ergebnisse cursor-for-loop, usw. ...
watchdog ist offline   Mit Zitat antworten