I am running:
[postgres@polaris pgsql]$ postmaster -V
postmaster (PostgreSQL) 7.1.3
[postgres@polaris pgsql]$
I am using a table with 609398 records made of varchar's, int's, and float's.
I am doing:
pma=> \d stck_dta_tbl_oprtnl
Table = stck_dta_tbl_oprtnl
+----------------------------------+----------------------------------+-------+
| Field | Type | Length|
+----------------------------------+----------------------------------+-------+
| stck_sym | varchar() | 7 |
| dta_date | date | 4 |
| dta_date_num | int4 | 4 |
| dta_date_dys | int4 | 4 |
| opn | float8 | 8 |
| hi | float8 | 8 |
| lw | float8 | 8 |
| cls | float8 | 8 |
| vol | int4 | 4 |
| unk | int4 | 4 |
+----------------------------------+----------------------------------+-------+
Index: i_stk_date
EXEC SQL BEGIN DECLARE SECTION;
char i_symbol[6];
int i_data_date;
float i_open;
float i_high;
float i_low;
float i_close;
int i_volume;
-
-
-
EXEC SQL DECLARE stck_info_crsr CURSOR
FOR SELECT stck_sym, dta_date_num, opn, hi, lw, cls, vol
FROM stck_dta_tbl_oprtnl;
EXEC SQL OPEN stck_info_crsr;
-
-
-
EXEC SQL FETCH stck_info_crsr INTO :i_symbol :i_data_date, :i_open, :i_high,
:i_low, :i_close, :i_volume;
when executing the fetch I get:
sqlcaid = SQLCA
sqlabc = 4.642502
sqlcode = 4.642506
sqlca.sqlerrm.sqlerrml = 49
sqlca.sqlerrm.sqlerrmc = Not correctly formatted int type: 29.25 line 500.
sqlerrp = NOT SET
sqlerrd = 4.642502
sqlext =
BEFORE ** A 6 20020102.000000 28.510000 29.340000 28.459999 0
SYMBOL ** 'A '
D_DATE ** '0'
i_open ** '20020102.000000'
VOLUME ** '0'
The BEFORE, SYMBOL, D_DATE, i_open, VOLUME are from simple printf's.
!!!!! NOTE THE 6 AFTER THE 'A'!!!!!!!! and the fact that I declare
i_symbol to be char i_symbol[6];
NOW I CHANGE THE i_symbol[6] to i_symbol[5], recompile and rerun.
I get this:
sqlcaid = SQLCA
sqlabc = 4.642502
sqlcode = 4.642506
sqlca.sqlerrm.sqlerrml = 49
sqlca.sqlerrm.sqlerrmc = Not correctly formatted int type: 29.25 line 500.
sqlerrp = NOT SET
sqlerrd = 4.642502
sqlext =
BEFORE ** A 5 20020102.000000 28.510000 29.340000 28.459999 0
SYMBOL ** 'A '
D_DATE ** '5'
i_open ** '20020102.000000'
VOLUME ** '0'
I tried changing the i_symbol[5] to char *i_symbol and got 'A 0';
Apparently postgres is misreading the declaration of i_symbol and
loading part of the declaration into the actual value of the data!!!!
The folks who do embedded stuff need to take a look at this!!!!!!
NOTE: I can read this record perfectly from within psql, so the data
itself is not corrupted.
pma=> fetch 1 in crsr;
stck_sym| dta_date|dta_date_num|dta_date_dys| opn| hi| lw| cls|
vol|unk
--------+----------+------------+------------+-----+-----+-----+-----+-------+---
A |2002-01-02| 20020102| 730852|28.51|29.34|28.46|29.25|2159300|
0
(1 row)
Thanks for your help!
Lynn