1

Temat: Błędny format timestamp?

Witam
mam tabelę mt_read do której wstawiam rekord:

INSERT INTO mt_read(mt_name, mt_value, mt_time, mt_quality)
    VALUES ('dev(IP XXX_XXX_XXX_XXX)--mt42.REG119', 12345, '2011-11-11 12:11:10', 1);

do tej tabeli jest wyzwalacz:

CREATE OR REPLACE FUNCTION f_tri_ai_aktual_mt_read() RETURNS trigger AS

$$

DECLARE 

licz INTEGER DEFAULT 0;
dg timestamp without time zone;
val INTEGER;
AwariaSkrot SMALLINT;
Pojazd INTEGER;
BitInfo SMALLINT; 
str VARCHAR;

BEGIN

dg := NEW.mt_time; 
val := NEW.mt_value;
AwariaSkrot := f_txt_AwariaSkrot_sint(NEW.mt_name);
Pojazd := f_txt_Pojazd_int(NEW.mt_name);
BitInfo := f_txt_BitInfo_sint(NEW.mt_name);

    SELECT INTO str tablename FROM pg_tables WHERE tablename=(Pojazd::integer)::varchar;
        IF not found THEN
        PERFORM f_int_CreateTable_tbl(Pojazd);

        END IF;

IF (BitInfo = 0) THEN 
    EXECUTE 'INSERT INTO "'||Pojazd||'" ("dtDataGodzina", "idfkAwarieSkroty", "sintNrBitu", "intWartosc")
        VALUES ('||dg||', '||AwariaSkrot||', 0, '||val||')';
RETURN NEW;
END IF;

IF (BitInfo = 16) THEN 
WHILE licz < 16 
LOOP
    IF ((val & (1<<licz))<>0) THEN 
        EXECUTE 'INSERT INTO "'||Pojazd||'" ("dtDataGodzina", "idfkAwarieGrupy", "sintNrBitu", "sintWartosc")
            VALUES ('||dg||', '||AwariaSkrot||', '||licz + 1||', '||(val & (1<<licz))||')';
    END IF;
    licz=licz+1;
END LOOP;

RETURN NEW;
END IF;

END;
$$
LANGUAGE PLPGSQL;

po wstawieniu rekordu dane trafiają do mt_read jest OK ale wyskakuje błąd przy wpisaniu danych do innej tabeli z tego co rozumiem to błąd dotyczy złego formatu zapisu typu timestamp:

ERROR:  syntax error at or near "12"
LINE 2:   VALUES (2011-11-11 12:11:10, 22, 0, 12345)
                             ^
ZAPYTANOE:  INSERT INTO "365" ("dtDataGodzina", "idfkAwarieSkroty", "sintNrBitu", "intWartosc")
        VALUES (2011-11-11 12:11:10, 22, 0, 12345)
KONTEKST:  PL/pgSQL function "f_tri_ai_aktual_mt_read" line 27 at EXECUTE statement

********** Błąd **********

ERROR: syntax error at or near "12"
Stan SQL:42601
Kontekst:PL/pgSQL function "f_tri_ai_aktual_mt_read" line 27 at EXECUTE statement

w obydwu tabelach pola zapisu znacznika czasowego są identyczne...

Ostatnio edytowany przez WitekS (2009-03-11 15:23:22)

2

Odp: Błędny format timestamp?

Brakuje apostrofow (chyba podwójnych) w  execute

EXECUTE 'INSERT INTO "'||Pojazd||'" ("dtDataGodzina", "idfkAwarieSkroty", "sintNrBitu", "intWartosc")
        VALUES ('''||dg||''', '||AwariaSkrot||', 0, '||val||')';

3

Odp: Błędny format timestamp?

Dzięki z apostrofami jest OK