2015-06-11 66 views
1

很抱歉,如果这个问题听起来很简单,但是我无法找到它的原因。隐藏字符

我具有其中带有参数的web服务的SOAP调用Oracle过程。

当我硬编码在web服务的参数和编译和执行过程中,我得到一个200 OK响应。另外,当我手动将参数作为IN参数传递给过程并使用存储在web服务中的变量时,我仍然得到200 OK响应。

但是出现的问题,当我使用选择查询的过程中从数据库表中检索参数,将其存储在程序中定义的变量,然后在Web服务中使用这些变量。网络服务失败,我得到一个500错误,指出无效的参数。

我的第一反应物对于在查询结果中的空白字符,因此我用于每个查询字段中的TRIM()函数。但我再次得到500错误回应。

工作:

<authentication> 
<username>abcde</username> 
<password>abcde</password> 
< /authentication> 

非工作:

var_user VARCHAR2(10); 
var_pass VARCHAR2(10); 

<authentication> 
<username>'||var_user||'</username> 
<password>'||var_pass||'< /password> 
< /authentication> 

select TRIM(username),TRIM(password) into var_user,var_pass from TBL_USER where.....; 

任何帮助或指针将不胜感激。

+0

也许'DUMP'功能可能是有用的调试此问题:http://docs.oracle.com/cd/B28359_01/server.111 /b28286/functions048.htm#SQLRF00635将查询选定的值转储到日志,并检查它们。 – krokodilko

回答

0

我怀疑这是由空白,可能是返回或任何不可见字符(/ n,/ r ...)引起的。我会使用正则表达式函数来删除不需要的字符。 这里是一个例子,它会删除标签和空格。

select 'asdfo'||chr(9)||'dsu iue', regexp_replace('asdfo'||chr(9)||'dsu iue', '['||chr(9)||' ]','') from dual 

或者这将删除所有的控制字符

select 'asdfo'||chr(9)||'dsu iue', regexp_replace('asdfo'||chr(9)||'dsu iue', '[[:cntrl:] ]','') from dual