Ergebnis 1 bis 5 von 5

Thema: Selectete Statements ausführen

  1. #1
    unbenannt ist offline Neuer Benutzer
    Registriert seit
    15.11.2010
    Beiträge
    7

    Standard Selectete Statements ausführen

    Hallo,

    ich erzeuge mir mittels des folgenden SELECT Befehls Statements zum 'granten' von Rechten.
    Code:
        
    SELECT 'GRANT SELECT ON ' || relname || ' TO viewer;'
        FROM pg_class JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace
        WHERE nspname = 'public' AND relkind IN ('r', 'v');
    Nun möchte ich die Befehle die dieser SELECT liefert gerne allesamt ausführen. Wie würdet ihr das machen?
    Mein erster Ansatz war es die Statements in einen Record zu schreiben und diesen dann durch zu iterieren. Funktioniert leider noch nicht ganz.
    Wenn ich zum testen das selectete in record inserten will, bleibt dieser leer.

    Mein zweiter Ansatz wäre es eventuell mit einer Row-Typen variablen zu machen.

    Was davon wäre die bessere Variante? Oder vielleicht hat jemand ja noch eine andere Idee.

  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von unbenannt Beitrag anzeigen
    Hallo,

    ich erzeuge mir mittels des folgenden SELECT Befehls Statements zum 'granten' von Rechten.


    Was davon wäre die bessere Variante? Oder vielleicht hat jemand ja noch eine andere Idee.
    EXECUTE verwenden, innerhalb von plpgsql.

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    unbenannt ist offline Neuer Benutzer
    Registriert seit
    15.11.2010
    Beiträge
    7

    Standard

    Dass der Befehl mit EXECUTE ausgeführt werden muss weiß ich. Das Problem war bis jetzt, dass jede Zeile des Select's ausgeführt werden muss. Also in einer Schleife und das hat Probleme bereitet.
    Bin auch noch nicht so ganz hinter die Funktionsweise von "FOR record IN ..." gestiegen.

    ich hab gerade ein Beispiel gefunden:
    Code:
    declare
    r record;
    begin
    for r in EXECUTE ''select * from '' || $1 loop
    return next r;
    end loop;
    Wenn ich das jetzt für meinen Select anpasse, sagt er mir dass ein Loop fehlt.

    Code:
    grant_expressions RECORD;
    
    BEGIN
        FOR grant_expressions IN EXECUTE 
            'SELECT 'GRANT SELECT ON ' || relname || ' TO viewer;' as t
            FROM pg_class JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace
            WHERE nspname = 'public' AND relkind IN ('r', 'v')'
        LOOP
            RETURN NEXT grant_expressions; 
        END LOOP;
    
        RETURN;
    Wie gesagt, so ganz seh ich da noch nicht durch.

  4. #4
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von unbenannt Beitrag anzeigen
    Dass der Befehl mit EXECUTE ausgeführt werden muss weiß ich. Das Problem war bis jetzt, dass jede Zeile des Select's ausgeführt werden muss. Also in einer Schleife und das hat Probleme bereitet.
    Bin auch noch nicht so ganz hinter die Funktionsweise von "FOR record IN ..." gestiegen.

    ich hab gerade ein Beispiel gefunden:
    Code:
    declare
    r record;
    begin
    for r in EXECUTE ''select * from '' || $1 loop
    return next r;
    end loop;
    Wenn ich das jetzt für meinen Select anpasse, sagt er mir dass ein Loop fehlt.

    Code:
    grant_expressions RECORD;
    
    BEGIN
        FOR grant_expressions IN EXECUTE 
            'SELECT 'GRANT SELECT ON ' || relname || ' TO viewer;' as t
            FROM pg_class JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace
            WHERE nspname = 'public' AND relkind IN ('r', 'v')'
        LOOP
            RETURN NEXT grant_expressions; 
        END LOOP;
    
        RETURN;
    Wie gesagt, so ganz seh ich da noch nicht durch.
    Code:
    [09:00]	<akretschmer>	??grantall
    [09:00]	<pg_docbot>	For information about 'grantall' see:
    [09:00]	<pg_docbot>	http://pgedit.com/public/sql/acl_admin/index.html :: http://www.onlamp.com/databases/2006/01/19/examples/plperl-article-2.sql :: http://www.depesz.com/index.php/2007/10/19/grantall/ :: http://www.depesz.com/index.php/2009/11/07/waiting-for-8-5-grant-all/
    schreib es halt einfach ab ...

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  5. #5
    castorp ist offline Erfahrener Benutzer
    Registriert seit
    27.06.2009
    Beiträge
    525

    Standard

    Zitat Zitat von unbenannt Beitrag anzeigen
    Wenn ich das jetzt für meinen Select anpasse, sagt er mir dass ein Loop fehlt.

    Code:
    grant_expressions RECORD;
    
    BEGIN
        FOR grant_expressions IN EXECUTE 
            'SELECT 'GRANT SELECT ON ' || relname || ' TO viewer;' as t
            FROM pg_class JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace
            WHERE nspname = 'public' AND relkind IN ('r', 'v')'
        LOOP
            RETURN NEXT grant_expressions; 
        END LOOP;
    
        RETURN;
    Warum so umständlich? Du kannst das EXECUTE doch einfach innerhalb von dem LOOP aufrufen, mit dem String den Du sowieso über den Cursor bekommst.
    Es gibt keinen Grund das SQL zurückzugeben.
    A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

Ähnliche Themen

  1. Individuelle maximale Ausführungszeit eines Statements?
    Von az_hf0 im Forum Trigger und Funktionen
    Antworten: 2
    Letzter Beitrag: 03.12.2009, 13:26
  2. Frage Benutzung des Escape-Syntax in prepared statements
    Von jan0sch im Forum Programmierung
    Antworten: 9
    Letzter Beitrag: 30.05.2009, 13:40
  3. komplexe where statements?
    Von wrap_it im Forum SQL
    Antworten: 12
    Letzter Beitrag: 12.01.2009, 20:24
  4. Frage java + PG & prepared statements ..
    Von symbiont im Forum Programmierung
    Antworten: 2
    Letzter Beitrag: 10.08.2008, 12:24
  5. kleines Problem mit Prepared Statements
    Von furianer im Forum Programmierung
    Antworten: 6
    Letzter Beitrag: 29.07.2008, 09:12

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum