0

我目前正在将 C 应用程序从 RdB (OpenVMS) 迁移到 Oracle 11 (Linux)。我现在偶然发现了两个数据库系统之间的差异。

例子:

create table MYTAB(id number(13), name varchar2(10)) ;

内容

Id   Name
1    Smith
2    Smith<blank>    // trailing blank after Smith

当我在嵌入式 SQL 中选择名称时,Oracle 会添加尾随空格,直到我的主变量的长度,即无法区分这两个名称。即使我修剪了名称,Oracle 也会添加空格。

但是对于按列名的 Select-Statement,我必须给出确切的空格数:

select id from MYTAB where name ='Smith'  -> gives Id 1
select id from MYTAB where name ='Smith ' -> gives Id 2

这让我很难处理数据,因为我无法将尾随空格的数量与我的 select 语句区分开来。

有什么方法可以阻止 Oracle 填充空白?

提前非常感谢 Jörg

4

2 回答 2

1

我想我自己找到了解决方案。如果我将选项 CHAR_MAP=STRING 添加到预编译器调用中,用于选择 VARCHAR2 列的嵌入式 SQL 调用不会用空白填充我的字符串。有了这个,我可以处理我的问题。

最好的问候约尔格

于 2015-12-04T11:37:44.883 回答
0

如果您有 CHAR() ,则您的字段有 VARCHAR2() 不会导致任何空白填充。

在插入语句中,您需要在插入之前 TRIM() 值。在我看来,你转换成表格是不正确的。

根据您的选择,您应该能够做到...

select id from MYTAB where trim(name) ='Smith'

此外,当您开始在 where 子句上使用 TRIM() 之类的函数时,它可能会导致 Oracle 进行表扫描并忽略索引。

于 2015-12-03T11:13:13.433 回答