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
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 1Ne 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