如何在JDBC里调用PLSQL创建的存储过程?

代码如下:
create table yejf_count_user(
u_status varchar2(20),
u_count integer
)
-- 动态SQL包: dbms_sql 包:
create or replace procedure yejf_count(e
p_status varchar2
)
IS
c_select integer;
v_result integer;

v_sql varchar2(500);

v_status yejf_user.u_status%type;
v_count integer;
v_errmsg varchar2(400);
begin

c_select := dbms_sql.open_cursor;
v_sql := '
select u_status,count(*) ';
v_sql := v_sql||'from yejf_user';
v_sql := v_sql||' where u_status = :status';
v_sql := v_sql||' group by u_status';

-- 解析 SQL;
dbms_sql.parse(c_select,v_sql,dbms_sql.native);
-- 绑定参数;
dbms_sql.bind_variable(c_select,'status',p_status);

现在我创建好了这个存储过程,想从JDBC里调用他,用CallableStatement 那调用的SQL字符串怎么写? ,另外解析和绑定参数是否在oracle中必须写上?
最新回答
不觉素颜

2025-02-25 04:00:48

import oracle.jdbc.*;
import oracle.sql.*;
import java.sql.*;
public class ReturnIndexTable
{
Connection ociconn=null;
OracleCallableStatement stmt =null;
public String[] getTable(String in_param)
{
String[] reAry=null;
try
{
OracleDriver S_Driver=null;
if(S_Driver==null)
S_Driver=new oracle.jdbc.OracleDriver();
DriverManager.registerDriver(S_Driver);
String url="jdbc:oracle:oci8:@test";
String user="user";
String password=" password";
ociconn= DriverManager.getConnection(url,user,password);
stmt =(OracleCallableStatement)ociconn.prepareCall("begin yejf_count(?,?); end;");
// 返回的索引表最大长度(可以大于索引表实际长度)
int maxLen =31;
// 索引表元素类型
int elemSqlType = OracleTypes.VARCHAR;
//索引表元素长度(CHAR, VARCHAR or RAW),其它元素类型可忽略该项值,但该参数仍须定义
int elemMaxLen=50;
stmt.setString(1,in_param);
// 注册返回参数
stmt.registerIndexTableOutParameter(2,maxLen,elemSqlType,elemMaxLen);
stmt.execute();
// 返回数组类型
reAry=(String[])stmt.getPlsqlIndexTable(2);
}
catch (Exception e)
{e.printStackTrace();
}
finally
{return reAry;
}
}
//关闭连接.............
}