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?
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
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?
Das sollte, als Kurzdemo, das sein, was Du suchst, oder?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)
Es lohnt sich, sich mit der Programmierung mit plpgsql zu beschäftigen, die Sprache ist einfach und mächtig zugleich.
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
hmmm, ist schon fast was ich will... gibt es die Möglichkeit, über eine function den Tabellennamen einzusetzen? à la
mtknr ist die Matrikelnummer eines Studenten, die magic holt sich einfach nur das flag aus einer anderen Tabelle.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);
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
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
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
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen