ms Oracle:避免在嵌入式SQL中进行空白填充

时间:2015-12-03 11:01:20

标签: linux oracle varchar2 openvms

我目前正在将一个C-application从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会将尾随空格添加到我的宿主变量的长度,即无法区分这两个名称。 即使我TRIM这个名字,Oracle也会添加空格。

但是按列名称选择_语句我必须给出确切的空格数:

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

这使我很难处理数据,因为我无法区分select语句中的尾随空格数。

有没有办法阻止Oracle填空?

提前多多感谢 约尔格

2 个答案:

答案 0 :(得分:1)

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

祝你好运 约尔格

答案 1 :(得分:0)

如果你有CHAR(),那么你的字段有VARCHAR2(),它不会导致任何空白填充。

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

在您选择的时候,您应该能够......

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

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