PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PL/SQL Fehlerprüfung mit PHP / Oracle


NullPointerException
2005-04-18, 19:51:41
Hallo,

über eine Website (PHP) sollen Usern Informationen über Ihre Datenbankobjekte einer Oracle8i Datenbank angezeigt werden, neben Tabellen, Triggern usw. eben auch Prozeduren und Funktionen (PL/SQL).

Es soll eine Oberfläche entworfen werden, die Laufzeitfehler eines PL/SQL-Skripts mit PHP irgendwie kennzeichnet (mit 1er kleinen Grafik oder sowas), um feststellen zu können, das das Script ohne Fehler nicht ausgeführt werden kann.

Soweit meine Informationen reichen, können Laufzeitfehler aber erst bei Kompilierung eines PL/SQL-Scripts (einer Funktion oder Prozedur) ermittelt werden.

Das wäre bei SELECT-Kommandos kein Problem, kritscher sieht es da mit Statements wie DROP TABLE aus, da man diese per 'rollback' nicht so einfach rückgängig machen kann. Außerdem ist das ganze etwas Performancekritisch wenn man 100 Funktionen hat, die ständig Datensätze eintragen und nachher wieder alles rückgängig machen müssen.

Hat hier vielleicht jemand einen brauchbaren Ansatz ??
Auf Anfrage gibt's Details.

AlexM
2005-04-18, 20:40:13
Soweit meine Informationen reichen, können Laufzeitfehler aber erst bei Kompilierung eines PL/SQL-Scripts (einer Funktion oder Prozedur) ermittelt werden.

Neeee!

Laufzeitfehler treten erst zur Laufzeit auf und nicht beim Kompilieren.. tztzt.....

Deshalb: Laufzeitfehler....

AlexM
2005-04-18, 21:02:11
Hab aber glaube ich was, was dir helfen könnte und was meinerr Meinung nach dein Problem darstellt.

http://rowa.giso.de/oracle/latex/Transaction_Control.html

MfG

AlexM

ok...in meinen Worten, wenn du also DDL (Data Definition Language) ausführst und du noch kein COMMIT abgesetzt hast, wird automatisch ein COMMIT ausgeführt. Also muss du dir gut überlegen, wo du eine Tabelle anlegst oder löschsts

NullPointerException
2005-04-19, 13:14:42
Ja Kompilierungsfehler Laufzeitfehler ..wer nimmt des schon so genau.. muss ja nicht immer alles so hundertprozentig korrekt sein. :rolleyes:

Original Oracle-Fehlermeldung
ORA >> Warnung: Funktion wurde mit Kompilierungsfehlern erstellt.
soll halt einfach heissen das ding läuft nicht... egal.

Automatisches COMMIT
Bei einigen Befehlen ist ein automatisches COMMIT eingebaut. Das bedeutet, wenn Sie Ihre Datenbank geändert, aber die Änderungen noch nicht mit COMMIT permanent gemacht haben und dann einen dieser Befehle ausführen, werden die Änderungen automatisch dauerhaft gespeichert. Die gebräuchlichsten Befehle mit einem automatischen COMMIT sind:
ALTER, CREATE, DROP und RENAME.

GENAU das ist das Problem.
Hab einfach mal folgendes ausprobiert:


>create table sowieso (nr int); tabelle
Tabelle wurde angelegt.
>savepoint nummer_eins;
Savepoint wurde angelegt.
>insert into sowieso (1);
>insert into sowieso (2);
>insert into sowieso (3);
...
>savepoint nummer_zwei
Savepoint wurde angelegt.
>update sowieso set nr = nr + 1;
...
--- bis hierhin funktionert das rollback to nummer_x wunderbar

>drop table sowieso;
hier wird automatisch der commit durchgeführt.
also findet er wahrscheinlich deswegen die savepoints nicht mehr
ORA-01086: Savepoint 'NUMMER_EINS' wurde nicht festgelegt

kann man das verhindern ??
oder ist das schlicht und einfach aus konsistenzgründen oder so was in die richtung nicht möglich??

und: kann es sein, dass man in pl/sql scripts keine create drop usw. statements absetzen kann ???
(sorry weiss noch nicht aber deswegen lern ichs)

AlexM
2005-04-19, 14:33:41
Also das kann man schon: Stichwort: immediate "drop tabel"

Aber warum willst du die Tabelle unbedingt löschen? Mach doch ein Leerload und fertig, villeicht brauchst du die Tabelle ja noch mal.... Die Tabelle einfach behalten nur ohne Werte.... Und bevor du den Leerload machst, einfach die Daten zur Sicherheit vorher in ne Datei schreiben....

Man muß sich im Umgang mit Datenbanken schon sicher sein was man tut...


Ja Kompilierungsfehler Laufzeitfehler ..wer nimmt des schon so genau.. muss ja nicht immer alles so hundertprozentig korrekt sein.

Das ist aber trotzdem ein Unterschied und ein entscheidener dazu.


P.S. Ich versteh die Logik deines Quelltextes nicht. Wieso greifst du auf ne Table zu die gelöscht ist. Schreib doch ne Abfrage ob se noch da ist... *verwirrt ist*


Zu den Befehlen: Nutz einfach Google das gibt es haufenweise Seiten die die Befehle erklären....

NullPointerException
2005-04-19, 15:41:54
jo ich werd mal mal genauer informieren... :redface:
Man muß sich im Umgang mit Datenbanken schon sicher sein was man tut... bin halt immer etwas übermütig wenns drum geht irgendwie schnell was hinzubekommen...
aber danke für die antworten, hat mir einiges weiter geholfen, werds in ruhe noch mal durchgehen und anschauen müssen

mfg

AlexM
2005-04-19, 15:59:23
Wenn du willst, poste Dein Ergebnis und ich schaus mal durch...

Gruß AlexM