Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 17 von 17

Thema: Schema aus CASE-Anweisung?

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

    Standard

    Zitat Zitat von symbiont Beitrag anzeigen
    ja .. und das diese oder jene tabelle koennte man den optimizer via "constraint exclusion" entscheiden lassen
    Dann zeige doch bitte, wie Du dann "Über einen flag in einer Tabelle" constraint exclusion machen willst zwischen Tabellen, die nicht über ein Constraint partitioniert sind.

    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

  2. #12
    symbiont ist offline Erfahrener Benutzer
    Registriert seit
    17.03.2008
    Ort
    NULL
    Beiträge
    1.320

    Standard

    hallo hallo ..

    wer verbietet ihm denn das constraint einzufuehren? .. irgendein stupides feld, das dem postges hilft zu entscheiden aus welcher tabelle er jetzt die daten liest?

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

    Standard

    Zitat Zitat von derLars Beitrag anzeigen
    hm, und dann innerhalb der Funktion mit if arbeiten... okay. Hatte gehofft das umgehen zu können.

    Vielen Dank und eine schöne Woche,
    Lars
    Code:
    test=# create or replace function lars(in key int, in tab text, out id int, out name text) returns setof record as $$declare sql text; begin sql := 'select id, name from ' || tab || ' where id = ' ||  key; return query execute sql; end; $$ language plpgsql;
    CREATE FUNCTION
    test=*# create table lars1 (id int, name text);
    CREATE TABLE
    test=*# create table lars2 (id int, name text);
    CREATE TABLE
    test=*# insert into lars1 values (1, 'aus tabelle lars1');
    INSERT 0 1
    test=*# insert into lars2 values (1, 'aus tabelle lars2');
    INSERT 0 1
    test=*# select * from lars(1, 'lars1');
     id |       name
    ----+-------------------
      1 | aus tabelle lars1
    (1 row)
    
    test=*# select * from lars(2, 'lars1');
     id | name
    ----+------
    (0 rows)
    
    test=*# select * from lars(1, 'lars2');
     id |       name
    ----+-------------------
      1 | aus tabelle lars2
    (1 row)
    Das sollte, als Kurzdemo, das sein, was Du suchst, oder?

    Es lohnt sich, sich mit der Programmierung mit plpgsql zu beschäftigen, die Sprache ist einfach und mächtig zugleich.


    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

  4. #14
    derLars ist offline Neuer Benutzer
    Registriert seit
    23.11.2009
    Beiträge
    11

    Standard

    hmmm, ist schon fast was ich will... gibt es die Möglichkeit, über eine function den Tabellennamen einzusetzen? à la

    Code:
    CREATE OR REPLACE FUNCTION getSchemaTable (in mtknr int, out dbtable text)
    RETURNS setof RECORD AS
    $$
    -- [ magic happening... ]
    if (result = 'trimester')
        return 'trimester.table';
    else
        return 'semester.table';
    $$
    LANGUAGE plpgsql;
    
    
    SELECT * FROM getSchemaTable (12345);
    mtknr ist die Matrikelnummer eines Studenten, die magic holt sich einfach nur das flag aus einer anderen Tabelle.

    Viele Grüße,
    Lars

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

    Standard

    Zitat Zitat von derLars Beitrag anzeigen
    hmmm, ist schon fast was ich will... gibt es die Möglichkeit, über eine function den Tabellennamen einzusetzen? à la

    Code:
    CREATE OR REPLACE FUNCTION getSchemaTable (in mtknr int, out dbtable text)
    RETURNS setof RECORD AS
    $$
    -- [ magic happening... ]
    if (result = 'trimester')
        return 'trimester.table';
    else
        return 'semester.table';
    $$
    LANGUAGE plpgsql;
    
    
    SELECT * FROM getSchemaTable (12345);
    mtknr ist die Matrikelnummer eines Studenten, die magic holt sich einfach nur das flag aus einer anderen Tabelle.

    Viele Grüße,
    Lars
    Nein.

    Du mußt ja dynamisch eine Tabelle auswählen, erst dann ist Dein SQL komplett. In Plain-SQL geht sowas nicht, daher, wie ich schrieb, mit EXECUTE innerhalb einer Function.

    In Deiner Funktion oben hast Du ja schon die korrekte Tabelle. Bastle daraus einen String mit dem vollständigen SQL, mehr ist doch gar nicht zu tun.

    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

  6. #16
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.056

    Standard

    Zitat Zitat von symbiont Beitrag anzeigen
    wer verbietet ihm denn das constraint einzufuehren? .. irgendein stupides feld, das dem postges hilft zu entscheiden aus welcher tabelle er jetzt die daten liest?
    Selbst wenn das so funktioniert: die Daten sind schon logisch getrennt. Warum möchtest du noch eine weitere Unterscheidung einführen?

    Das ist Aufwand und Fehleranfällig.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  7. #17
    symbiont ist offline Erfahrener Benutzer
    Registriert seit
    17.03.2008
    Ort
    NULL
    Beiträge
    1.320

    Standard

    Zitat Zitat von ads Beitrag anzeigen
    Selbst wenn das so funktioniert: die Daten sind schon logisch getrennt. Warum möchtest du noch eine weitere Unterscheidung einführen?

    Das ist Aufwand und Fehleranfällig.
    ohje ojemine

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. Problem bei Restore: ungültige Anweisung \N
    Von Hannes23 im Forum Allgemeines
    Antworten: 0
    Letzter Beitrag: 29.02.2012, 10:16
  2. Rollback mit Extra Anweisung
    Von CvonS im Forum Andere Datenbanken
    Antworten: 1
    Letzter Beitrag: 01.07.2009, 15:00
  3. Problem Frage zu einer geschachtelten SQL-Anweisung
    Von wh_20 im Forum SQL
    Antworten: 2
    Letzter Beitrag: 26.05.2009, 07:03
  4. Anweisung über Parameter ausführen
    Von kbsolutions im Forum Trigger und Funktionen
    Antworten: 4
    Letzter Beitrag: 24.08.2007, 09:33
  5. Antworten: 2
    Letzter Beitrag: 02.05.2007, 12:39

Stichworte

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