如何解决存储过程中的Oracle查询
我正在使用存储过程,我有一个查询,应该带一个特定的ID
SELECT * into SID_INCOMING FROM
(
SELECT SID
FROM TBL_INCOMING
WHERE XKEY = ''||nro_tarjetatmp||'_'||fecha_hr_trasacfinal||'_'||datos_referencia_adquirentetmp||''
AND CODIGO_AUTORIZACION IN(''||codigo_autorizacion||'')
AND MIT IN(''||mit||'')
ORDER BY SID ASC
) WHERE ROWNUM <= 1;
变量值按顺序
- 4946110112060005_200116_74064350165099586691985
- 536018
- 05
执行后,我得到这个结果
但是当我使用相同的参数执行相同的查询时,会得到此结果
这就是我很乐意接受的程序,为什么会这样呢? 在我看来,sp没有考虑第二和第三参数
欢迎任何帮助,谢谢
解决方法
您需要使用别名来避免AND MIT IN(''||mit||'')
的问题:此谓词将MIT列与其自身进行比较。
所以只需添加别名:
SELECT * into SID_INCOMING FROM
(
SELECT SID
FROM TBL_INCOMING ti
WHERE ti.XKEY = ''||your_proc_name.nro_tarjetatmp||'_'||your_proc_name.fecha_hr_trasacfinal||'_'||your_proc_name.datos_referencia_adquirentetmp||''
AND ti.CODIGO_AUTORIZACION IN(''||your_proc_name.codigo_autorizacion||'')
AND ti.MIT IN(''||your_proc_name.mit||'')
ORDER BY ti.SID ASC
) WHERE ROWNUM <= 1;
为什么还要添加''||
?它不会在变量中添加任何内容,但是会在非varchar2 / char数据类型的情况下强制进行隐式类型转换。
请您显示“描述TBL_INCOMING”的结果吗?由于看起来CODIGO_AUTORIZACION是数字数据类型,可能MIT也是数字。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。