我正在使用tcl tdbc :: odbc观察一些奇怪的东西。
从表中检索结果时,如果字段定义为数字(5,0),而值在Oracle中为负数,则返回的数字为正数。
SQLPLUS,SQL DEVELOPER和使用Julia ODBC包(使用相同的unixODBC驱动程序和dsn定义),正值返回负值,但只有tcl tdbc :: odbc包返回负值的正值
我已经尝试过这个测试。
在Oracle中创建表
CREATE TABLE TEST_TABLE
(
NUMBERONLY NUMBER
, INTEGERONLY INTEGER
, NUMBER5 NUMBER(5)
);
插入值
INSERT INTO TEST_TABLE (NUMBERONLY, INTEGERONLY, NUMBER5) VALUES (-1, -1, -1)
然后从SQLPLUS查询,一切都正确返回。
SQL> select * from test_table;
NUMBERONLY INTEGERONLY NUMBER5
---------- ----------- ----------
-1 -1 -1
来自Julia的使用具有相同DSN定义的ODBC,也是正确的。
julia> odbc_connection = ODBC.DSN("TEST", "TEST", "TEST")
julia> ODBC.query(odbc_connection, "select * from test_table")
1×3 DataFrames.DataFrame
|Row | NUMBERONLY | INTEGERONLY | NUMBER5 |
-------------------------------------------
| 1 | -1.0 | -1.0 | -1.0 |
然后从Tcl查询,您可以看到NUMBER5表返回错误的结果
tdbc::odbc::connection create db "DSN=TEST; UID=TEST; PWD=TEST"
% db allrows "select * from test_table"
{NUMBERONLY -1.0 INTEGERONLY -1 NUMBER5 4294967295}
注意,如果我这样调用查询,那么结果是正确的
% db allrows "select cast(number5 as integer) number5 from test_table"
{NUMBER5 -1}
这是一个错误,还是我错误地调用了该函数。