Jump to content
  • 0
Melde dich an, um diesem Inhalt zu folgen  

Dynamic Performance Views (v$) in PL/SQL nutzen (Oracle)

Frage

Hallo,

Ich schreibe gerade eine PL/SQL-Funktion, die auf die Dynamic Performance View V$TRANSPORTABLE_PLATFORM zurückgreifen muss. Das SQL-Statement lässt sich mit dem User ganz normal ausführen. Benutze ich dies aber in einer Funktion, sagt der Compiler, dass die View nicht vorhanden sei. Das selbe geschieht auch, wenn ich einfach eine View mit dem SQL-Statement:

SELECT * FROM V$TRANSPORTABLE_PLATFORM

erstellen möchte.

Kann ich solche Views überhaupt in einer Funktion/View verwenden und wenn ja: Wie?

bearbeitet von Whiz-zarD

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

3 Antworten auf diese Frage

Empfohlene Beiträge

  • 1

Da musst du bei Oracle immer ziemlich aufpassen, ist leider unintuitiv. Erstens musst du mit den Grants aufpassen, innerhalb von PL/SQL-Blöcken werden Rollenprivilegien nicht geprüft, da sind dann also direkte Grants notwendig. Zweitens ist V$TRANSPORTABLE_PLATFORM ein Synonym für V_$TRANSPORTABLE_PLATFORM und auch da ist ein direkter Grant notwendig.

Vermutlich liegt da das Problem.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
  • 0

Tja, was hast du denn genau gemacht?

Folgendes Minimalbeispiel funktioniert bei mir

Als DBA:

CREATE USER TEST IDENTIFIED BY TEST DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS;
GRANT CREATE SESSION TO TEST;
GRANT CREATE VIEW TO TEST;
GRANT SELECT ON V_$TRANSPORTABLE_PLATFORM TO TEST;
GRANT CREATE PROCEDURE TO TEST;

Mit User Test funktioniert dann dies alles:

SELECT * FROM V$TRANSPORTABLE_PLATFORM;
BEGIN
    EXECUTE IMMEDIATE('CREATE VIEW TESTVIEW AS SELECT * FROM V$TRANSPORTABLE_PLATFORM');
END;

DECLARE
  v_test VARCHAR2(200);
BEGIN
    SELECT PLATFORM_NAME INTO v_test FROM V$TRANSPORTABLE_PLATFORM WHERE ROWNUM <= 1;
    DBMS_OUTPUT.PUT_LINE(v_test);
END;

DECLARE
  v_test VARCHAR2(200);
BEGIN
    SELECT PLATFORM_NAME INTO v_test FROM TESTVIEW WHERE ROWNUM <= 1;
    DBMS_OUTPUT.PUT_LINE(v_test);
END;

CREATE OR REPLACE PROCEDURE TESTOUT IS
  v_test VARCHAR2(200);
BEGIN
    SELECT PLATFORM_NAME INTO v_test FROM TESTVIEW WHERE ROWNUM <= 1;
    DBMS_OUTPUT.PUT_LINE(v_test);
END TESTOUT;
EXECUTE TESTOUT;

 

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
Gast
Diese Frage beantworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Melde dich an, um diesem Inhalt zu folgen  

Fachinformatiker.de, 2020 SE Internet Services

fidelogo_small.png

if_icon-6-mail-envelope-closed_314900.pnSchicken Sie uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App


Get it on Google Play

Kontakt

Hier werben?
Oder senden Sie eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...

Wichtige Information

Fachinformatiker.de verwendet Cookies. Mehr dazu in unserer Datenschutzerklärung