Hi,
ich bin es schon wieder.
Bin dabei Zeilen einer Tabelle auszulesen und in einer andere einzufügen. Die Tabellendefinitionen sind identisch. Habe auch testweise die selbe Tabelle beim Auslesen und Einfügen verwendet. Manchmal klappt das Auslesen hinsichtlich des verwendeten Datentyps und manchmal nicht. Da wird varchar nicht als varchar ausgelesen und das gibt dann Porbleme beim Einfügen.
Das ist die Tabelle:
und hier der zugehörige Record einer Zeile:Code:CREATE TABLE tabrdheader ( nhid bigint NOT NULL, cpartition character(4) NOT NULL, vcline character varying(80) NOT NULL, vccell character varying(80) NOT NULL, vcmodule character varying(80), vcswprojectname character varying(80), vcswprojectversion character varying(16), vcsetupdate timestamp without time zone NOT NULL, vclogicalid character varying(30) NOT NULL, vcphysicalid character varying(30), vcpartno character varying(50) NOT NULL, ntdrelease double precision NOT NULL, vcprocessingdate timestamp without time zone NOT NULL, vcprocessingcode character varying(10) NOT NULL, vcprocessresult character varying(10) NOT NULL, nprocesscycle double precision NOT NULL, nprocessparts double precision NOT NULL, dinsertdate timestamp without time zone NOT NULL )
Ich habe es auch schon mit ROWTYPE probiert, jedoch mit dem Selben Ergebnis.Code:723,0107,EHB1-1,"Kugel 3,5mm",,xxxx,"y.zz ","1970-06-10 16:04:16.6",1541,102,0265250007-00,161,"2001-08-28 14:39:10.43",1,1,1,1,"2002-03-27 00:00:00"
Warum funktioniert das nicht?
mfg
Marcus
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Das ist die Funktion. Ich bekomme dann den Fehler, dass bei einigen Spaltenwerten der Datentyp nicht passt, um ein Insert durchzuführen. Mittels record sollten doch die Datentypen passen, wenn ich sie auslese. Der Sinn oder Unsinn der Funktion sei mal außer Acht gelassen.
mfgCode:-- Function: hs2k_migration."update"() -- DROP FUNCTION hs2k_migration."update"(); CREATE OR REPLACE FUNCTION hs2k_migration."update"() RETURNS character varying AS $BODY$ DECLARE dauer integer; erg_tabrdheader record; erg_test tabrdheader%ROWTYPE; test tabrdheader.vcline%Type; BEGIN FOR erg_test IN select * from tabrdheader_0107 LOOP -- FOR erg_tabrdheader IN select * from tabrdheader_0107 LOOP RAISE NOTICE 'ERGEBNIS: %', erg_test; RAISE NOTICE 'ERGEBNIS: %', test; -- RAISE NOTICE 'ERGEBNIS: %', erg_tabrdheader; -- EXECUTE '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;
Marcus
das problem ist folgendes:
du kannst die text-repräsentation fuer diese row so nicht einfach als input fuer dynamisches sql benutzenCode:select row('hallo',null,1) ergibt "(hallo,,1)"
ja für die leere Spalte null würde ich mir was einfallen lasen, aber komisch ist, dass der Datentyp varchar mal mit Apostrophe und mal ohne Apostrophe drin ist. Das ist das große Problem. Wenn ich den String dann noch ändere vor dem Einfügen, weiß ich ja nicht, ob der 3. Datenwert jetzt ein varchar ist oder nicht.
mfg
Marcus
verwende doch einfach statisches SQL
einfach INSERT INTO tablexyz VALUES rowVariable;
ohne execute davor
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Funktioniert leider auch nicht. Grund ist wieder der Datentyp.
Ich dachte der liest den Datentyp direkt aus und versucht nicht anhand der darin enthaltenen Zeichen diesen zu interpretieren. Das selbige gilt für Type und RowType?
Meinst mit einem Update? Weiteren Tip?
mfg
Marcus
dann sind deine tabellen nicht identisch - folge einfach dem fehler oder dem weissen kaninchen
kontrolliere das doch bitte mal - auch ob die "natuerliche reihenfolge" der attribute in beiden tabellen gleich ist!
ak meint du kannst auch einfach so die daten uebertragen
INSERT INTO target
SELECT * FROM source
WHERE condition;
diese loops sind an dieser stelle nicht geeignet
Geändert von symbiont (02.12.2009 um 11:52 Uhr)
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen