视图定义:
CREATE OR REPLACE VIEW MY_VIEW AS SELECT a.column1||'/'||a.column2 as c1,
b.column1 as c2,
.
.
From table1 a join table2 b on
(a.id=b.id)
join more tables (8 more tables)
我的查询:
SELECT * from MY_VIEW WHERE c1 = '1234567/1';
我上面有查看和查询,我在Oracle中使用。出于某种原因,尽管MY_VIEW中存在少量行的数据,但查询不会返回数据。
我通过使用length,trim,to_char函数检查数据是否有任何问题,但我没有看到任何问题。
如果我在table1上直接运行查询以获取相同的数据,我会得到值。
select a.column1||'/'||a.column2
from table1
where a.column1||'/'||a.column2 = '1234567/1'
你们中有没有人曾经遇到过这种情况吗?我经历了创建视图和反复编写查询的每一步,但我没有发现任何不同之处。查询适用于某些数据这一事实让我相信数据应该出错,但所使用的表不会手动修改。
我尝试使用like运算符,如下所示
select * from my_view where c1 like '1234567/1%'
这可以按预期工作。但是length()
函数并没有给出与我所看到的不同的数字。
有人可以告诉我是否有办法可以查找是否存在任何特殊字符数据?
更新1:
select count(1) from my_view;
以上查询给了我13。
select * from my_view where rownum < 15;
以上查询不提供任何行。
select * from my_view where rownum < 100;
上面的查询返回视图中的所有13行。
答案 0 :(得分:0)
“任何人都可以通知我是否有办法可以查找是否存在任何特殊字符数据?”
您可以使用内置函数dump()
。这给出了传递值的数据类型和长度,以及它的内部表示(与ASCII值相同)。
select dump('2300/1') as your_case
from dual
/
返回
Typ=96 Len=6: 50,51,48,48,47,49