Announcement

Collapse
No announcement yet.

OOP mit Oracle

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • OOP mit Oracle

    Hallo !<p>
    Ich habe bisher mit Interbase und Deplih gearbeitet.<br>
    Um ein lang ersehntes komplexes Datenbankprojekt endlich zu verwirklichen,
    suche ich allerdings nach einer komfortablen Datenbank.<br>
    Durch die Programmierung mit Delphi bin ich an Objekte gewöhnt und
    an die Möglichkeiten, damit Datenfelder in den Objekten zu kapseln.<p>
    Für die Entwicklung einer Datenbank suche ich daher nach einer Möglichkeit,
    Tabellen der folgenden Form aufzubauen:<p><br>
    create table VerkaufJournal (<br>
    LfndRechnNr integer,<br>
    ArtikelNr integer,<br>
    ArtikelName varchar(20))<p><p>
    create table Artikel (<br>
    ArtikelNr integer,<br>
    Name varchar(20))<p><p>
    Ich möchte nun bei einem Zugriff der Form SELECT * FROM VerkaufJournal<br>
    eine automatische Dereferenzierung des Feldes ArtikelNr auf die Tabelle Artikel.<br>
    Sowas wird ja normalerweise mit einer View realisiert. Wenn man allerdings viele Tabellen hat,<br>
    die auf andere Tabellen Referenzen haben, muss man so viele Views definieren.<p>
    Ich denke man müsste eine Methode GETARTIKELNAME in der Tabelle VerkaufJournal<br>
    definieren, die immer dann vom DBMS aufgerufen wird, wenn der Wert der Spalte<br>
    ArtikelName abgerufen wird, und die dann eine SELECT..FROM Artikel enthält.<p>
    Alternativ dazu könnte man auch ein Berechnetes Feld ArtikelName definieren, das<br>
    dies SELECT-Abfrage enthält. Aber zumindest in Interbase ist es meines Wissens und<br>
    meiner Erfahrung nach nicht möglich, SELECTs in berechneten feldern zu verwenden.<p>
    Hat jemand einen Tip ?<p>
    Gruß Marcus

  • #2
    Hi!

    Erst mal eine Lösung die du eigentlich nihct willst *g* und dann das was du dir ersehnst :

    -- Simpelste Lösung und du brauchst keinen View

    select VerkaufJournal.*,Artikel.Name from
    VerkaufJournal ,Artikel
    where
    VerkaufJournal.ArtikelNr = Artikel.ArtikelNr (+);

    Es gibt natürlich viele Wege
    Was ungefähr dem entspricht was du haben möchtest sieht nach etwas
    mehr Arbeit aus:

    Ach ja - habs nur einfach schnell so runtergeschrieben. Also nicht getestet!!! Müsste aber so ungefähr funktionieren.

    create type t_verkauf as object
    (
    LfndRechnNr integer,
    ArtikelNr integer,
    ArtikelName varchar(20),
    member function get_name_artikel(p_ArtikelNr in number )
    return number
    );

    create type body
    as
    member function get_name_artikel(p_ArtikelNr in number )
    return number
    is
    re_name varchar2(200) := '';
    begin
    begin
    select name
    into re_name
    from artikel
    where ArtikelNr = p_ArtikelNr;
    return re_name;

    exception
    when no_data_found or too_many_rows then
    return ' ';
    end;

    end;

    create table verkauf_artikelname of t_verkauf;

    Hast du sowas in der Art gemeint ?
    Wenn du mich fragst lohnt der Aufwand nicht.
    Wenn man natürlich seinem Chef zeigen will wie toll man
    OOP beherscht kommts schon gut. Ist möglicherweise ein neuer
    Dienstwagen drin

    Gruß
    Michae

    Comment

    Working...
    X