PL/SQL - Bezeichner muss deklariert werden

das ist ein follow-up zu einem Post vom 28.12.06 - hatte mir einen Finger gebrochen und habe daher die Tastatur einige Wochen meiden müssen.

Nochmal die Historie:

Hallo,

ich habe folgendes Problem mit PL/SQL:

Ich möchte bei einer MEMBER-Funktion eines Objektes als Parameter Objekte vom Typ „xmldom.DOMDocument“ übergeben. Rückgabewert soll eine „xmldom.DOMNode“ sein:

MEMBER FUNCTION toXMLNode (doc xmldom.DOMDocument) RETURN xmldom.DOMNode

Beim kompilieren kommt allerdings der Fehler

„PLS-00201: Bezeichner ‚XMLDOM.DOMDOCMENT‘ muss deklariert werden“

Zugriffsrechte für den DB-Benutzer sind gesetzt. Im BODY funktioniert auch alles - nur als Parameter und Return-Value kann ich die Typen nicht benutzen.

Weiß jemand Rat?

Vielen Dank für die Hilfe.

Antwort von Tomh am 29.12.06:

Hi!

„PLS-00201: Bezeichner ‚XMLDOM.DOMDOCMENT‘ muss deklariert
werden“

Ein Tip: metalink.oracle.com beantwortet solche Fragen ausgezeichnet!

Hier die Lösung direkt vom Metalink:

  1. Launch sql*plus, and log in as user sys
  2. Create the following synonyms :
    create public synonym XMLDOM for sys.XMLDOM;
    create public synonym XMLPARSER for sys.XMLPARSER;
  3. Login to the schema
  4. Recompile invalid packages

Zusatz: Du brauchst ev. die Berechtigung direkt für den User; zum Compilieren hast Du mit allgemeine Berechtigungen (Rollen o.ä.) erhebliche Probleme.

Grüße,
Tomh

Erstmal verspäteten, aber dafür reichlich viel Dank für die Antwort :smile:

Ein Tip: metalink.oracle.com beantwortet solche Fragen
ausgezeichnet!

Das sieht mir nach einer bezahl-Plattform aus. Ich bin nur ein armer Student, der seine Studienarbeit unter XE entwickelt und daher fällt profesioneller Support leider aus dem Rahmen :wink:

create public synonym XMLDOM for sys.XMLDOM;
create public synonym XMLPARSER for sys.XMLPARSER;

Diese bestanden schon. War wohl default, ich habe es nämlich nicht gemacht.

Zusatz: Du brauchst ev. die Berechtigung direkt für den User;
zum Compilieren hast Du mit allgemeine Berechtigungen (Rollen
o.ä.) erhebliche Probleme.

Ich habe sogar den Tip unter http://forums.oracle.com/forums/thread.jspa?threadID… übertroffen und folgendes gemacht:
grant all on xmldom to p2;
grant all on xmlparser to p2;
grant all on xslprocessor to p2;
(p2 ist der korekte User).
Böse, ich weiß, aber für eine Testdatenbank irelevant.

Der gleiche Fehler taucht immernoch auf. Ich habe die Pakete auch schon als User ‚system‘ angelegt. Gleiches Problem.

Alles was ich versuche strebt übrigens einem Beispiel-Quelltext unter http://www.ordix.de/ORDIXNews/1_2006/oracle_xml_cock… ‚Abb. 4‘ entgegen. Dort geht auch ein xmldom.X als Rückgabewert.

Zur Aufgabe: Es soll ein XML-Dokument mit einer netten Hierarchie erstellt werden und dafür ist eine Aufteilung der Logik auf mehrere Typen mit member-Funktionen, die zu den XML-Typen korrespondieren einfach schöner als ein riesen Block an Code, der die Datenstrukturen durchläuft (IMO).
Sobald ich aber xmldom.X als Rückgabewert oder als Attribut des Typs angebe (und nicht nur als temporäre Variable im BODY), kennt er den Typ plötzlich nicht mehr.

Bin für jede Hilfe dankbar :smile:

Viele Grüße,
Christian

Hi - ich schon wieder :wink:

Ein Tip: metalink.oracle.com beantwortet solche Fragen
ausgezeichnet!

Das sieht mir nach einer bezahl-Plattform aus. Ich bin nur ein
armer Student, der seine Studienarbeit unter XE entwickelt und
daher fällt profesioneller Support leider aus dem Rahmen :wink:

Tja, Support direkt von der Quelle kostet halt …

Aber mal zuerst: Um welche DB-Version geht’s hier eigentlich genau?

Zusätzliche Anmerkung: XE (also die Express-Version) ist nur eine abgespeckte Version der „richtigen“ DB; es könnte als auch sein, daß

  • Du diverse Funktionalitäten nachladen mußt
  • oder es unter XE ganz einfach nicht funktioniert (Oracle packt nicht jede Funktionalität in jede Edition rein, schließlich muß es ja noch wen geben, der sich die Enterprise-Edition für reichlich Geld kauft, nur um ein einziges zusätzliches Feature zu nutzen …)

Grüße,
Tomh

Hallo,

vielen Dank für deine Aufdringlichkeit :wink:

Tja, Support direkt von der Quelle kostet halt …

und die Arbeitszeit eines Studenten zahlt man nicht, also kann der ruhig mal einige Stunden rumprobieren oder Leute in Foren nerven :wink:

Aber mal zuerst: Um welche DB-Version geht’s hier eigentlich
genau?

Zusätzliche Anmerkung: XE (also die Express-Version) ist nur
eine abgespeckte Version der „richtigen“ DB; es könnte als
auch sein, daß

  • Du diverse Funktionalitäten nachladen mußt
  • oder es unter XE ganz einfach nicht funktioniert (Oracle
    packt nicht jede Funktionalität in jede Edition rein,
    schließlich muß es ja noch wen geben, der sich die
    Enterprise-Edition für reichlich Geld kauft, nur um ein
    einziges zusätzliches Feature zu nutzen …)

Konkret handelt es sich um die Oracle Database 10g Express Edition (Oracle Database 10g Release 2 (10.2.0.1), Express Edition for Microsoft Windows). Aktuellste Version - is ja kostenlos, also können wir da ruhig zulangen :smile:

xmldom funktioniert lustiger Weise ja sogar in der Version. Alles was nicht funktioniert ist, diese Objekte als Rückgabewerte zu benutzen. Mittlerweile habe ich die Aufgabe auch schon in einem riiiiiisen Funktionsblock zusammen gestellt. In einem riesen Block. Ist nur leider unwartbar in meinen Augen und ich stehe tierisch auf Sustainability, also möchte ich das Ding ungerne in die Tonne treten.

Vermutlich übersehe ich aber nur irgendeine dumme Kleinigkeit. Muss das wohl nochmal genauer durchgehen.

Zum Glück ist aber auch der DB-Teil nur ein kleiner Teil der Aufgabe und andere Hochsprachen sind leichter zu debuggen. Ich hätte auch gerne die XML-Geschichte gleich in Java gemacht, aber die VM z.B. gibts in XE nicht. Pluspunkt für die Zahlvariante … wie auch die Multiprozessor-Unterstütung, der Speicherplatz, die Replikation, Oracle Application Express 3.0, etc. :wink:

Wäre klasse, wenn dir noch was einfallen würde, aber ich schiebe die Schuld eher meiner Unwissenheit zu. Ich übersehe bestimmt irgendeine Kleinigkeit, die für dich selbstverständlich ist. Asche auf mein Haupt :-/

Viele Grüße,
Christian

Hallo nochmal,

bei Packages funktioniert es übrigens, xmldom-Typen als Rückgabewert oder Parameter zu verwenden. Nur bei selbstdefinierten Types nicht.

Seltsames Verhalten … Ideen dazu?

Viele Grüße,
Christian