Oracle Stored Procedure

Homeros

Benutzer
Beiträge
10
Hallo,

ich komme derzeit mit einer PL/SQL Sache nicht weiter

Das erstellen eines Stored Procedure.

Ich habe drei Tabellen A, B, C

select
B.per_nr,
B.typ,
B.p_std,
A.f_bez,
A.per_nr,
C.f_bez,
C.zeit
from
Fahrer B,
Auto A,
Auto2 C
where
A.per_nr = B.per_nr
and
C.f_bez = A.f_bez
and
B.per_nr = 10010005;

Die habe ich mit ein ein Join zusammengeführt.

Ich möchte gern den Wert B.p_std und C.zeit in einer Variable schreiben,
hinterher möchte ich die Variable addieren und das Ergebnis wieder zurück schreiben in B.p_std.

Über ein hinweis wäre ich sehr dankbar.
 
Werbung:
Ich habe versucht

Create or replace function func_h
(p_per_nr in fahrer.per_nr%TYPE,
v_F_BEZ in auto.f_bez%TYPE)
RETURN VARCHAR2
IS
v_std1 fahrer.p_std%TYPE;
v_std2 Auto2.zeit%TYPE;
v_std3 Auto2.zeit%TYPE;
select
B.per_nr,
B.typ,
B.p_std,
A.f_bez,
A.per_nr,
C.f_bez,
C.zeit
from
Fahrer B,
Auto A,
Auto2 C
where
A.per_nr = B.per_nr
and
C.f_bez = A.f_bez
and
B.per_nr = 10010005;

v_std3 :=v_std1+v_std2

Update fahrer
set fahrer.per_nr = v_std3
where B.per_nr = 10010005;
end;
Commit;
End;


Leider habe ich ein großen Wurm drien und sehn ihn nicht grr
 
1) Nun ich weiß nicht wie das bei Oracle ist, bei MSSQL kannst du mit einer Funktion keine Updates oder Inserts machen, dafür ist eine SP gedacht.
2) Die Funktion gibt normalerweise einen Wert zurück, in deinem Fall aber wohl NULL wenn nicht eine Fehlermeldung kommt.
3) Du setzt v_std3 = v_std1 + vstd2, aber 1 und 2 werden nur definiert und sind NULL oder ist das irgendeine geheime Oracle Syntax?
 
bei MSSQL kannst du mit einer Funktion keine Updates oder Inserts machen,
Ein weiterer Punkt warum ich Oracle bevorzuge :)
2) Die Funktion gibt normalerweise einen Wert zurück, in deinem Fall aber wohl NULL wenn nicht eine Fehlermeldung kommt.
Anlegen kann man Sie, gibt dann aber ne Exception nach dem Aufruf (wobei die eigentlichen Inserts/Updates dennoch ausgeführt werden, sofern es vor der Exception ein Commit gibt)
oder ist das irgendeine geheime Oracle Syntax?
Nein... Das ist schlichtweg falsch :)

@Homeros verstehen, nach deinen Wünschen anpassen, implementieren...
(Ich hab deinen Ablauf nämlich noch nicht so ganz verstanden...)
Code:
Create Or Replace Function func_h
(
   p_per_nr_ In fahrer.per_nr%Type,
   v_f_bez_  In auto.f_bez%Type
) Return Varchar2 Is
   v_std1 fahrer.p_std%Type;
   v_std2 auto2.zeit%Type;
   v_std3 auto2.zeit%Type;

   Cursor my_data(per_nr_ In Number) Is
      Select b.p_std
            ,c.zeit
      From   fahrer b
            ,auto   a
            ,auto2  c
      Where  a.per_nr = b.per_nr
      And    c.f_bez = a.f_bez
      And    b.per_nr = per_nr_;

Begin
   Open my_data(p_per_nr_);
   Fetch my_data
      Into v_std1
          ,v_std2;
   Close my_data;

   v_std3 := v_std1 + v_std2;

   Update fahrer
   Set    per_nr = v_std3
   Where  per_nr = 10010005;
   --Warum auch immer du hier die "per_nr" ändern willst... Dachte das wäre der Pk... ???

   Return v_f_bez_;
End;
 
Werbung:
Zurück
Oben