ORACLE: IPC per OCI

Hallo

Ein Programm das mit C++ geschrieben wurde und per OCI mit einer Oracle- Datenbank verbunden ist, soll einen Datenbank- Trigger detektieren können.

Das heisst: Wird in der Datenbank etwas in eine bestimmte Tabelle geschrieben, soll z.B. der AFTER INSERT TRIGGER, per OCI, dem C+± Programm mitteilen, die entsprechenden Fenster aufzufrischen.

Ich habe probiert in der OCI- Dokumentation, in der Oracle- Referenz oder bei „ASK TOM“ etwas darüber zu finden, leider ohne Erfolg.

Weiss jemand Bescheid, ob und wie das funktionieren könnte?

Dank und Gruss
Olli

PS: ORACLE 10g, Redhat Linux ES3

Hallo,

was auf jeden Fall funktioniert, ist, eine externe Prozedur aufzurufen, die das dann übernimmt.

Gruß

Peter

Hallo

Danke für die Antwort.

An eine PL/SQL- Wrapper- Prozedur um eine Java- Klasse habe ich auch schon gedacht. Ich hoffte aber, dies mit OCI erledigen zu können. Dies scheint aber nicht möglich zu sein.

Gruss

Olli

Hallo Olli,

hast Du schon mal an das Paket UTIL_TCP gedacht? Bin gerade bei Kyte darüber gestolpert. Damit könntest Du Deinem Programm über einen Port etwas mitteilen.

Gruß

Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Peter

Ich habe mir das Package UTL_TCP einmal angesehen, dabei bin ich auf das Package DBMS_PIPE gestossen. Ist ja schon alles da, man muss es nur finden :wink:

Danke für den Tipp.
Gruss, Olli

CREATE OR REPLACE PACKAGE sys.dbms\_pipe IS
 -- etc.
 function send\_message(pipename in varchar2,
 timeout in integer default maxwait,
 maxpipesize in integer default 8192)
 return integer;
 pragma restrict\_references(send\_message,WNDS,RNDS);
 -- Send a message on the named pipe. The message is contained in the
 -- local message buffer which was filled with calls to 'pack\_message'.
 -- A pipe could have been created explicitly using 'create\_pipe', or
 -- it will be created implicitly.
 -- etc.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Olli!

dabei bin ich auf das Package DBMS_PIPE gestossen.

Habe leider deine Anfrage zu ungenau gelesen. Wenn ich überlauert hätte, dass dbms_pipe für dich relevant ist - ich verwende das an allen Ecken und Enden…
Dafür habe ich noch einen kleinen Hinweis (weil mir das nämlich schon ein paar mal das Leben ziiieeeemlich schwer gemacht hat): Achte darauf, dass deine Pipe nicht voll wird! Der SendMessage wartet nämlich genau so lange, bis er in „seiner“ Pipe was reinschreiben kann. Kein Timeout, keine Fehlermeldung, nix… einfach nur warten (bis irgendwer sich bequemt aus der Pipe auch zu lesen, oder selbige per Purge leer zu machen).

Gruß
Martin

Hallo Martin

Habe leider deine Anfrage zu ungenau gelesen. Wenn ich
überlauert hätte, dass dbms_pipe für dich relevant ist - ich
verwende das an allen Ecken und Enden…

Ursprünglich ging es um Inter Process Communication IPC per OCI. Ich habe aber nicht heraus gefunden, ob und wie das funktionieren könnte.

Beim durchforsten von SYS bin ich dann auf DBMS_PIPE gestossen. Da ich mit Named Pipes unter C++ schon gearbeitet habe, scheint mir das die einfachste Lösung zu sein.

Dafür habe ich noch einen kleinen Hinweis (weil mir das
nämlich schon ein paar mal das Leben ziiieeeemlich schwer
gemacht hat): Achte darauf, dass deine Pipe nicht voll wird!
Der SendMessage wartet nämlich genau so lange, bis er in
„seiner“ Pipe was reinschreiben kann. Kein Timeout, keine
Fehlermeldung, nix… einfach nur warten (bis irgendwer sich
bequemt aus der Pipe auch zu lesen, oder selbige per Purge
leer zu machen).

Danke für deinen Hinweis, ich werde darauf achten.

Gruss, Olli