Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 22

Thema: Tabellenzeile vim record auslesen

  1. #1
    drooper ist offline Benutzer
    Registriert seit
    05.08.2009
    Beiträge
    81

    Standard Tabellenzeile vim record auslesen

    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:

    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
    )
    und hier der zugehörige Record einer Zeile:

    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"
    Ich habe es auch schon mit ROWTYPE probiert, jedoch mit dem Selben Ergebnis.

    Warum funktioniert das nicht?

    mfg
    Marcus

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

    Standard

    Zitat Zitat von drooper Beitrag anzeigen
    Hi,

    ich bin es schon wieder .
    Warum funktioniert das nicht?

    mfg
    Marcus
    Wir wissen weder, was Du genau gemacht hast, noch welcher Fehler inkl. Fehlermeldung aufgetreten ist.


    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
    symbiont ist offline Erfahrener Benutzer
    Registriert seit
    17.03.2008
    Ort
    NULL
    Beiträge
    1.320

    Standard

    Zitat Zitat von drooper Beitrag anzeigen
    Hi,

    ich bin es schon wieder .
    oh nein!!!

  4. #4
    drooper ist offline Benutzer
    Registriert seit
    05.08.2009
    Beiträge
    81

    Standard

    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.

    Code:
    -- 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;
    mfg
    Marcus

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

    Standard

    das problem ist folgendes:

    Code:
    select row('hallo',null,1)
    
    ergibt
    
    "(hallo,,1)"
    du kannst die text-repräsentation fuer diese row so nicht einfach als input fuer dynamisches sql benutzen

  6. #6
    drooper ist offline Benutzer
    Registriert seit
    05.08.2009
    Beiträge
    81

    Standard

    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

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

    Standard

    verwende doch einfach statisches SQL

    einfach INSERT INTO tablexyz VALUES rowVariable;

    ohne execute davor

  8. #8
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.337

    Standard

    Zitat Zitat von drooper Beitrag anzeigen
    aber komisch ist, dass der Datentyp varchar mal mit Apostrophe und mal ohne Apostrophe drin ist. Das ist das große Problem.

    mfg
    Marcus
    Deine Daten enthalten Zeichen, die mißverstanden werden könnten, daher die unterschiedlichen Darstellungen.

    Das, was Deine function da macht, ist mit einem SQL-Einzeiler auch und besser lösbar.

    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

  9. #9
    drooper ist offline Benutzer
    Registriert seit
    05.08.2009
    Beiträge
    81

    Standard

    Zitat Zitat von symbiont Beitrag anzeigen
    verwende doch einfach statisches SQL

    einfach INSERT INTO tablexyz VALUES rowVariable;

    ohne execute davor
    Funktioniert leider auch nicht. Grund ist wieder der Datentyp.


    Zitat Zitat von akretschmer Beitrag anzeigen
    Deine Daten enthalten Zeichen, die mißverstanden werden könnten, daher die unterschiedlichen Darstellungen.
    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?

    Zitat Zitat von akretschmer Beitrag anzeigen
    Das, was Deine function da macht, ist mit einem SQL-Einzeiler auch und besser lösbar.
    Meinst mit einem Update? Weiteren Tip?

    mfg
    Marcus

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

    Standard

    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)

Seite 1 von 3 123 LetzteLetzte

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