我有一个PL/SQL代码,如:
case when column between 201203 and 201201
then other_column
end
Run Code Online (Sandbox Code Playgroud)
我知道列中的值是201203.因此代码应该返回一些值.但直到我纠正它为止:
case when column between 201201 and 201203
then other_column
end
Run Code Online (Sandbox Code Playgroud)
关键字之间的原因是什么?它是如何在Oracle数据库上实现的?
我知道 Oracle(我正在开发 Oracle11gR2)可以隐式地将数据类型相互转换(如果它能够这样做的话)。例如,如果我尝试将数字插入 varchar 区域,它会隐式地将数字转换为 varchar,反之亦然,如果 varchar 是有效数字,则它会转换为数字。
Oracle 也在连接上执行这种隐式转换。如果我将数字列连接到 varchar 列,它会隐式地将 varchar 转换为数字并完成查询。但是,如果 varchar 列中存在任何无效数字,则会抛出一个错误。ORA-01722 : Invalid Number您可以通过运行以下代码来查看此设置:
create table test_1(
id varchar2(20),
val number);
create table test_2(
id number,
name varchar2(20)
);
insert into test_1 values ('abc', 10);
insert into test_1 values ('1', 11);
insert into test_2 values (1,'abc');
insert into test_2 values (2,'def');
-- Throw error
select
*
from
test_1, test_2
where
test_1.id = test_2.id
-- work
select
test_1.id, val, name
from
test_1, test_2
where …Run Code Online (Sandbox Code Playgroud)