Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 22

Thema: Tabellenzeile vim record auslesen

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

    Standard

    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

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

    Standard

    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

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

    Standard

    Geht klar, werde ich zukünftig beachten


    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();
    Fehlermeldung:

    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

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

    Standard

    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)

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

    Standard

    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)

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

    Standard

    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.*)

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

    Standard

    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

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

    Standard

    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

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

    Standard

    Alles klar, danke dir. Dann muss es über eine Funktion gehen.

    mfg
    Marcus

  10. #20
    castorp ist offline Erfahrener Benutzer
    Registriert seit
    27.06.2009
    Beiträge
    493

    Standard

    Zitat Zitat von drooper Beitrag anzeigen
    Sag mal, kann man in einem SQL file PL/pgSQL verwenden, oder ist das nur innerhalb von Funktionen möglich?
    Noch nicht.
    In 8.5 wird das möglich sein, aber momentan nur über eine Funktion

Seite 2 von 3 ErsteErste 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