tdbc :: odbc从包含负整数的表中返回正整数

时间:2018-04-22 21:47:22

标签: oracle odbc tcl

我正在使用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}

这是一个错误,还是我错误地调用了该函数。

0 个答案:

没有答案