存储过程中的Oracle查询

Oracle query in stored procedure

我正在使用存储过程,我有一个查询应该带一个特定的 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;

变量值有序

当它执行时我得到这个结果

但是当我使用相同的参数执行相同的查询时,我得到了这个结果

这是我应该通过手术得到的结果,为什么会这样? 在我看来,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 数据类型的情况下强制进行隐式类型转换。

你能展示“describe TBL_INCOMING”的结果吗?因为看起来 CODIGO_AUTORIZACION 是数字数据类型,MIT 可能也是数字。