Обсуждение: C trigger problem : conversion of CString to Datum
Hello, I cannot convert properly a cstring to a Datum : Here my code : int attColNumber; Datum new_barcode; bool isnull = 0; char barcode[14]; elog(INFO, "gd_trigfunc_before_article_insert() : bar_code = %s", barcode); attColNumber = COL_BARCODE; new_barcode = CStringGetDatum(barcode); workTuple = SPI_modifytuple(trigdata->tg_relation, trigdata->tg_trigtuple, 1, &attColNumber, &new_barcode, &isnull); the result : # INSERT INTO t_articles VALUES (4001, 1, '065', 'White', NULL, 'XS', null); INFO: gd_trigfunc_before_article_insert() : bar_code = 5492850000012 INSERT 0 1 # select * from t_articles WHERE k_id > 2000; k_id | product_id | color_id | color_desc | height | size | bar_code ------+------------+----------+------------+--------+------+-------------- 4001 | 1 | 065 | White | | XS | 492850000012 (1 ligne) Missing the firs digit of the barcode. Thanks in advance for your help Regards Guy
Guy Deleeuw <G.De_Leeuw@eurofer.be> writes: > I cannot convert properly a cstring to a Datum : Well, CStringGetDatum would be the proper thing to use if you meant to produce a Datum of type "cstring". But what you need here is a Datum of the same type as the target column, which evidently isn't cstring. Most likely you need to convert the string to type text. regards, tom lane
Hi Tom Many thanks for your answer, all work fine now :-) Regards Guy Le 20/02/10 16:45, Tom Lane a écrit : > Guy Deleeuw<G.De_Leeuw@eurofer.be> writes: > >> I cannot convert properly a cstring to a Datum : >> > Well, CStringGetDatum would be the proper thing to use if you meant to > produce a Datum of type "cstring". But what you need here is a Datum > of the same type as the target column, which evidently isn't cstring. > Most likely you need to convert the string to type text. > > regards, tom lane >