#include #include #include int main(void) { char *text="error\n"; numeric *value1, *value2, *res; exec sql begin declare section; numeric(14,7) des = {0, 0, 0, 0, 0, NULL, NULL} ; exec sql end declare section; double d; FILE *dbgs; if ((dbgs = fopen("log", "w")) != NULL) ECPGdebug(1, dbgs); exec sql whenever sqlerror do sqlprint(); exec sql connect to mm; exec sql create table test (text char(5), num numeric(14,7)); value1 = PGTYPESnumeric_new(); PGTYPESnumeric_from_int(1407, value1); text = PGTYPESnumeric_to_asc(value1, -1); printf("long = %s\n", text); value1 = PGTYPESnumeric_from_asc("2369.7", NULL); value2 = PGTYPESnumeric_from_asc("10.0", NULL); res = PGTYPESnumeric_new(); PGTYPESnumeric_add(value1, value2, res); text = PGTYPESnumeric_to_asc(res, -1); printf("add = %s\n", text); PGTYPESnumeric_sub(res, value2, res); text = PGTYPESnumeric_to_asc(res, -1); printf("sub = %s\n", text); PGTYPESnumeric_copy(res, &des); exec sql insert into test (text, num) values ('test', :des); value2 = PGTYPESnumeric_from_asc("2369.7", NULL); PGTYPESnumeric_mul(value1, value2, res); exec sql select num into :des from test where text = 'test'; PGTYPESnumeric_mul(res, &des, res); text = PGTYPESnumeric_to_asc(res, -1); printf("mul = %s\n", text); value2 = PGTYPESnumeric_from_asc("10000", NULL); PGTYPESnumeric_div(res, value2, res); text = PGTYPESnumeric_to_asc(res, -1); PGTYPESnumeric_to_double(res, &d); printf("div = %s %e\n", text, d); exec sql rollback; exec sql disconnect; if (dbgs != NULL) fclose(dbgs); return (0); }