0

我发现 tcl tdbc::odbc 有一些奇怪的地方。

从表中检索结果时,其字段定义为 number(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}

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

4

0 回答 0