我有一个带参数的pl/sql查询:
plSqlQuery = "declare "
+ " num integer := 1000;"
+ " myStr varchar2(100):= ?;"
+ "begin "
+ " dbms_output.put_line('abc');"
+ " dbms_output.put_line('hello');"
+ " dbms_output.put_line(myStr);"
+ "end;"
我的java方法是这样的:
public static void getData(String sqlQuery) throws SQLException, IOException{
Statement s =conn.createStatement();
try{
s.executeUpdate("begin dbms_output.enable();end;);
s.executeUpdate(sqlQuery);
try{
CallableStatement call = conn.prepareCall("declare num integer = 10000; begin dbms_output.get_lines(?, num); end;)
}
call.registerOutParameter(1,Types.ARRAY, "DBMSOUTPUT_LINESARRAY");
call.execute();
Array array = null;
try {
array = call.getArray(1);
System.out.println(Arrays.asList((Object[])
array.getArray()));
}
finally {
if (array != null)
array.free();
}
现在有了以上两种方法,我想执行我的getdata方法,但我不知道如何将参数传递给它(mystr)。
您能告诉我在java方法中应该在哪里设置字符串参数吗?
应该是这样的吗
s.setString(x, "abcdefg");
或
call.setString(2, "abcdefg");
它给了我一个甲骨文错误,比如
ora-01008:并非所有变量都已绑定
我尽力做到诚实,但没有成功。
2条答案
按热度按时间yzxexxkh1#
如果你正在传递你的字符串
plSqlQuery
作为您的getData()
方法(例如,通过调用getData(plSqlQuery)
)然后您将遇到ora-01008“未绑定所有变量”错误,因为您没有为?
占位符。你不能用普通的
Statement
对于占位符,必须使用PreparedStatement
相反试着换一条线
具有
u2nhd7ah2#
我想出来了。它使用3种不同的语句:(