VIEW dynamisch erstellen in PL/SQL

Hallo allerseits,

mich interessiert dringend, ob und wie man innerhalb einer PL/SQL-Prozedur eine VIEW erzeugen kann, die zudem noch von Parametern, die in der Prozedur entstehen, abhängig ist.

Gruß

Michael Zadlo

Hi!

mit z.b. „execute immediate“ (gibt aber noch andere methoden - wobei ich eher dazu neige, in der view functions einzubinden)

begin

view_string := ‚create or replace view blabla as select feld1,‘||to_char(ein_berechneter_wert)||’ from tabelle where …’;

execute immediate string;


end;

grüße,
Tomh

Hallo zurück,

hast Du auch ne Ahnung, ob dies bereits bei Oracle 8 mit implementiert ist?

Ich bekomme dort nämlich bei EXECUTE IMMEDIATE im Procedure Builder die Fehlermeldung „Error 103 at line…: Encountered the symbol „IMMEDIATE“ when expecting one of the following := . ( @ % ; …“

Gruß

Michael Zadlo

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

hi!

argh! dürfte wohl erst ab 8i funktionieren (dachte, das gibt’s schon seit 8.0.4) - tja, nun mußt du mit dem dbms_sql-package arbeiten …

grüße,
tomh

Ich hab noch mal nachgeschaut. Hier läuft Oracle in der Version 8.1.7.4, was laut diversen Seiten im Internet diesen Befehl auch unterstützen müsste. Der Procedure-Builder meckert rum, weil er noch 8.0 ist.

Wenn ich die Prozedur allerdings per Hand erstelle, kann ich sie auch compilieren, nur beim Ausführen erhalte ich ne andere Fehlermeldung.

Prozedur:

IS
BEGIN
EXECUTE IMMEDIATE ‚CREATE OR REPLACE VIEW ZADLO.VIEW AS
SELECT a.col1, a.col2 FROM ZADLO.VIEW2 a
GROUP BY a.col1, a.col2 WITH READ ONLY‘;
COMMIT;
END;

Fehlermeldung:

*
ERROR at line 1:
ORA-01031: insufficient privileges
ORA-06512: at „ZADLO.PROC“, line 3
ORA-06512: at line 1

Ne Ahnung, woran das liegen könnte?

Ohne die Einbindung in den EXECUTE IMMEDIATE-String kann ich die VIEW ohne Probleme erzeugen.

Gruß

Michael

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

hi!

ERROR at line 1:
ORA-01031: insufficient privileges
ORA-06512: at „ZADLO.PROC“, line 3
ORA-06512: at line 1

Ne Ahnung, woran das liegen könnte?

Ohne die Einbindung in den EXECUTE IMMEDIATE-String kann ich
die VIEW ohne Probleme erzeugen.

wer ist der besitzer der prozedur?
hat der ausführende user auch execute-rechte auf die prozedur und ein „create view“-rechte? besitzt der user select-rechte auf die tabellen?

ein reines grant-problem, mehr nimmer …

grüße,
tomh

Hallo noch einmal,

das Problem ist gelöst. Die Ursache lag darin begründet, dass mir die CREATE VIEW-Rechte nur über eine Rolle zugewiesen waren. Sobald dies dem Nutzer direkt zugewiesen wurden, funktionierte komischerweise alles.

Gruß

Michael Zadlo

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

hi!

Hallo noch einmal,

das Problem ist gelöst. Die Ursache lag darin begründet, dass
mir die CREATE VIEW-Rechte nur über eine Rolle zugewiesen
waren. Sobald dies dem Nutzer direkt zugewiesen wurden,
funktionierte komischerweise alles.

eine der „komischen“ sachen unter oracle: in prozeduren braucht der compilierende/ausführende user nicht nur die rolle auf objekte (oder db-rechte), sondern direkt der user selber

kannst z.b. auch mit einer tabelle des users xyz als user abc der die rolle efg hat, die eigentlich das select-recht auf die tabelle xyz.tabelle_1 hat; abc braucht direkt den grant auf die tabelle, um eine db-procedure valid zu compilieren …

grüße,
tomh