【发布时间】:2016-06-23 17:11:39
【问题描述】:
我有一个调用 Oracle (12) PL/SQL 存储过程的 VB6 应用程序。它使用 ADODB 连接对象。
从应用程序传递的字符串参数可能有尾随空格。当 Oracle 收到它们时,所有尾随空格都消失了。
我希望保留尾随空格。我到处搜索,但在网上找不到任何关于 VB、ADO 或 Oracle 的行为的参考,这些参考表明应该修剪尾随空格在参数中。
在 Oracle 中,存储过程的参数定义为 varchar2。 在 VB6 中,我使用 CreateParameter() 将参数添加为 adVarChar(我尝试过其他字符串类型,但没有帮助)。调用指定名称、类型、方向、大小和值。
就在执行调用之前,我可以检查 Command.Parameters 集合并验证是否存在任何尾随空格。
Oracle 引用明确指出,对于 varchar2 数据类型,尾随空格不会被忽略。
有人能描述一下 VB 或数据库中是否有导致此问题的选项,并且可以关闭吗?
【问题讨论】:
-
您能出示您的代码吗?
-
IIRC,尾随空格存储在数据库中,如果您检索该值,它将在那里。 comparisons 忽略它们,即 SQL 语言标准规定在进行 WHERE 子句和 CASE 类型检查时,
Foo等于Foo。 -
啊,这里有一些关于这个主题的文档。它来自 Sql Server 而不是 Oracle,但它又指的是 ansi 标准,Oracle 可能也遵循该标准(Ansi SQL-92,第 8.2 节,,一般规则 #3)support.microsoft.com/en-us/kb/316626 在 Sql Server 中,您可以通过 LIKE 比较而不是相等比较来解决此问题。不知道 Oracle 是否有相同的行为。
-
嗨乔尔,我明白你在说什么 RE 比较,但我发现的实际行为是,一旦 sproc 收到空格,参数中就根本不存在空格。我正在立即记录这些值(在测试中),它们就消失了。事实上,我认为 Oracle char 类型如您所描述的那样工作,并且 varchar2 应该设计为不修剪空格(在比较或其他情况下)。
标签: oracle plsql vb6 ado adodb