相同的查询在shell和代码中返回不同的结果

时间:2016-05-15 04:55:25

标签: python oracle

以前,我偶然发现甲骨文中有一件有趣的事情 - Oracle: ORA-01722: invalid number。事实证明这是Oracle的自然行为(尽管与我之前处理的其他主要数据库不同--MySQL,Postgres和SQLite)。但现在我看到另一个违反直觉的事情 - 我有一个非常简单的查询,它返回shell中的结果,但是没有从Python代码中返回任何内容。这是查询:

SELECT * FROM TEST_TABLE T0 
INNER JOIN TEST_TABLE_2 T1 ON T1.ATTR=T0.ID 
INNER JOIN TEST_TABLE_3 T2 ON T2.ID = T1.ID

正如您所看到的,这是一个非常简单的查询,只有两个简单的连接。这是伏都教魔术截屏:

enter image description here

因此,正如您在shell中看到的那样,它返回数据。这是幽灵的另一张照片:

enter image description here

现在你看到在Python代码中它什么也没有返回。但是,如果我们稍微调整一下这个查询,它确实会返回 - 只需删除第二个连接:

enter image description here

那么,这有什么问题呢?我怎么能相信Oracle? (现在我觉得我可以更多地依赖像SQLite这样的文件数据库,然后依赖Oracle)。

修改

以下是包含数据的架构:

SQL> SELECT COLUMN_NAME, DATA_TYPE FROM USER_TAB_COLUMNS 
WHERE TABLE_NAME = 'TEST_TABLE';

COLUMN_NAME
------------------------------
DATA_TYPE
------------------------------
ID
NUMBER


SQL> SELECT * FROM TEST_TABLE;

ID
----------
     1

SQL> SELECT COLUMN_NAME, DATA_TYPE FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = 'TEST_TABLE_2';

COLUMN_NAME
------------------------------
DATA_TYPE
------------------------------
ID
NUMBER

TXT
VARCHAR2

ATTR
NUMBER


SQL> SELECT * FROM TEST_TABLE_2;

ID
----------
TXT
-----------------------------------
ATTR
----------
     2
hello
     1


SQL> SELECT COLUMN_NAME, DATA_TYPE FROM USER_TAB_COLUMNS 
WHERE TABLE_NAME = 'TEST_TABLE_3';

COLUMN_NAME
------------------------------
DATA_TYPE
------------------------------
ID
NUMBER


SQL> SELECT * FROM TEST_TABLE_3;

ID
----------
     2

修改

更确切地说,我用这些陈述创建了我的三个表:

CREATE TABLE test_table(id number(19) default 0 not null)
CREATE TABLE test_table_2(txt varchar(255),id number(19) default 0 not null,attr number(19) default 0 not null)
CREATE TABLE test_table_3(id number(19) default 0 not null)    

0 个答案:

没有答案