ich füge ja Testweise in die selbe Tabelle ein, aus der ich die Datensätze zuvor hole.
Die Funktion ist noch nicht vollständig. Nach dem Select sollen die Datensätze modifiziert werden und dann in eine andere Tabelle eingefügt weren.
mfg
Marcus
zeig doch mal den aktuellen versuch ohne EXECUTE mit statischen SQL der da schief geht
fürs näxte mal - am besten gleich code liefern wenn was nicht geht
Geht klar, werde ich zukünftig beachten
Fehlermeldung:Code:-- Function: hs2k_migration."update"() -- DROP FUNCTION hs2k_migration."update"(); CREATE OR REPLACE FUNCTION hs2k_migration."update"() RETURNS character varying AS $BODY$ DECLARE erg_tabrdheader record; erg_test tabrdheader%ROWTYPE; test tabrdheader.vcline%Type; BEGIN FOR erg_tabrdheader IN select * from tabrdheader_0107 LOOP -- RAISE NOTICE 'ERGEBNIS: %', erg_test; -- RAISE NOTICE 'ERGEBNIS: %', erg_tabrdheader; -- EXECUTE 'Insert into tabrdheader_0107 values ' -- || erg_tabrdheader; Insert into tabrdheader_0107 values (erg_tabrdheader); END LOOP; EXECUTE 'Delete from tabrdheader_0908'; */ RETURN 'ENDE'; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE COST 100; ALTER FUNCTION hs2k_migration."update"() OWNER TO hs2k; -- select hs2k_migration.update();
FEHLER: Spalte »nhid« hat Typ bigint, aber der Ausdruck hat Typ record
LINE 1: Insert into tabrdheader_0107 values ( $1 )
^
HINT: Sie müssen den Ausdruck umschreiben oder eine Typumwandlung vornehmen.
QUERY: Insert into tabrdheader_0107 values ( $1 )
CONTEXT: PL/pgSQL function "update" line 30 at SQL-Anweisung
mfg
Marcus
argh .. hatte ich in meinem beispiel eine klammer um die rowVariable?
bei dem anfaenglichen code von dir - wo du EXECUTE verwendet hattest - hast du auch keine klammer verwendet, weil du gesehen hast, dass die "klammer" da irgendwie mit drin ist ..
einfach ... VALUES rowVariable ..... und nicht VALUES (rowVariable)
diese klammerung erzeug eine feldliste .. daher sind die elemente dazwischen jeweils als einzelnes attribut zu verstehen - der erste wert muss den typ des ersten attributes deiner table haben .. der ist biging - und du versuchst diesem eine record-variable zuzuweisen -> siehe fehler
Geändert von symbiont (02.12.2009 um 12:21 Uhr)
Zu Anfang hatte ich auch keine Klammer drum. Da aber die folgende Fehlermeldung kam, hab ich es mit Klammern probiert:
FEHLER: Syntaxfehler bei »$1«
LINE 1: Insert into tabrdheader_0107 values $1
^
QUERY: Insert into tabrdheader_0107 values $1
CONTEXT: SQL statement in PL/PgSQL function "update" near line 30
********** Error **********
FEHLER: Syntaxfehler bei »$1«
SQL state: 42601
Context: SQL statement in PL/PgSQL function "update" near line 30
Geändert von drooper (02.12.2009 um 12:27 Uhr)
seltsam .. ich war mir sicher, dass das geht - da muss ich nochmal forschen
das hier funktioniert auf jeden fall - aber diesmal wieder MIT klammerung
INSERT INTO ... VALUES (recordVariable.*)
Ja, danke dir.
Sag mal, kann man in einem SQL file PL/pgSQL verwenden, oder ist das nur innerhalb von Funktionen möglich?
mfg
Marcus
in einem SQL script kannst du
1. eine solche funktion erzeugen CREATE
2. diese erzeugte funktion danach "ausfuehren" z.B. SELECT my_function()
"einfach so" wird in einem SQL file nix ausgefuehrt
Alles klar, danke dir. Dann muss es über eine Funktion gehen.
mfg
Marcus
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen