java调用oracle存储过程 关于sql里面in函数参数的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java调用oracle存储过程 关于sql里面in函数参数的问题相关的知识,希望对你有一定的参考价值。

in函数里面的参数是字符类型的,如'1330251','1336140'

直接使用值代替参数,就可以查出来,但是传参进去就查不出任何结果 ,打印出来pkStagesPersonArray 的参数值为:'1330251','1336140',感觉没错,但是就是没值,求高手指点一二。

调用存储过程是java 把组合起来的字符串传到数据库后台操作,如果你in ( pkStagesPersonArray),传到数据库后台还是 in ( pkStagesPersonArray) 而非你想要的 in('1330251','1336140' )所以你应该把pkStagesPersonArray 里面的内容转换成 '1330251','1336140' 再拼接起来追问

我java也是这么写的,执行的时候,没值。在oracle里面执行也没值,截图给你看看,

,如果pkStagesPersonArray=‘1330251’或者='1336140'就会有对应的值。

追答

你可以看看plsql 语法 你的单引号多了
举个栗子
a.mobileid in('123','456','789')
语法是这样的 不是(''123','234','345'')

追问

没多,打印  pkStagePersonArray  的值是:'1330251','1336140'。看上去应该是正确的,sql执行就不行了。

这个是oracle字符串拼接的写法。

追答

你改成 PKSTAGESPERSONARRAY := ''1330251','1331619''

追问

改成这样,oracle语法错误,要不Q聊。715377484

参考技术A pkStagePersonArray 是什么数据类型,可能是和数据类型有关,'1330251','1336140'这个值怎么传进去的。追问

字符串。

追答

图上pkStagePersonArray 的值引号好多, 按现在应该是 in (" '1330251','1336140' ") 这个样子,可以把pkStagePersonArray 按逗号先分隔开,在连接成'1330251','1336140' 这个格式

追问

打印 pkStagePersonArray 的值是:'1330251','1336140'。看上去应该是正确的,sql执行就不行了。

如何调用ORACLE程序包中的存储过程

pl/sql里,select
语句必须接into
,不接into那就得返回一个游标出去,比如
create
or
replace
package
test_package
is
procedure
query_test(num
number,po_cursor
out
sys_refcursor);
end
test_package;
create
or
replace
package
body
test_package
is
procedure
query_test(num
number,po_cursor
out
sys_refcursor)
is
begin

select
unitname,tradetype,workernumber

from
test

where
income=num;
end
query_test;
end
test_package;
参考技术A 如何调用ORACLE程序包中的存储过程
call
包名.存储过程名(输入的参数);
例如:调用sp_package包的update_sal过程。
call
sp_package.update_sal('SMITH',
1000);

以上是关于java调用oracle存储过程 关于sql里面in函数参数的问题的主要内容,如果未能解决你的问题,请参考以下文章

myBatis 调用 Oracle 存储过程,报错,求解答

VBS 调用SQL Server加密存储过程提示:对象关闭时 不允许操作

关于SQLSERVER存储过程的问题,求解

关于oracle存储过程中的sql拼接,大神进!!!

使用带有布尔输入参数的 PL/SQL 在 oracle 中调用 java 存储过程

JAVA调用Oracle存储过程和函数