写了一个测试类,调用存储过程,但是总获取不到的应用程序传递过来得参数,数字能传,但是字符串就不行了 create or replace type irms_type_ma as object (
user_order_id varchar2(20),
in_res_attribute_code varchar2(50),
res_value varchar2(50),
req_user varchar2(50),
req_date date,
op_user varchar2(50)
);
/
create or replace type irms_type_ma_table as table of irms_type_ma ;
/
create or replace procedure proc_modifyattribute(params in irms_type_ma_table)
as
tmp_user_order_id varchar(20); --入参user_order_id
tmp_in_res_attribute_code varchar(50); --入参in_res_attribute_code
tmp_res_table_column_value varchar(50); --入参tmp_res_table_column_value
tmp_product_id rt_UserOrder_info.product_id%type;
tmp_net_type_id rt_UserOrder_info.net_type_id%type;
tmp_in_busi_res_kind_code rt_ResReturnConfig_dict.in_busi_res_kind_code%type;
tmp_in_atom_res_value rt_ResReturnConfig_dict.in_atom_res_value%type;
tmp_in_res_table rt_ResReturnConfig_dict.in_res_table%type;
tmp_in_res_table_pk rt_ResReturnConfig_dict.in_res_table_pk%type;
tmp_in_res_table_column rt_ResReturnConfig_dict.in_res_table_column%type;
tmp_res_id rt_WorkRes_info.res_id%type;
tmp_atom_res_kind_code rt_WorkAtomRes_info.atom_res_kind_code%type;
tmp_value rt_WorkAtomRes_info.value1%type; --资源值
tmp_sql varchar2(1000); log_req_user varchar2(50);
log_req_date date;
log_op_user varchar2(50);
log_before_res_value varchar2(50); cursor curs is select * from the (
select cast (params as irms_type_ma_table) from dual
);
begin
for cur in curs loop
--赋值
tmp_user_order_id := cur.user_order_id ;
tmp_in_res_attribute_code := cur.in_res_attribute_code;
tmp_res_table_column_value := cur.res_value;
log_req_user := cur.req_user;
log_req_date := cur.req_date;
log_op_user := cur.op_user; --1.查询出某个用户订单对应的产品ID(product_id)、接入方式(net_type_id)
dbms_output.put_line('1.查询出某个用户订单对应的产品ID(tmp_product_id)、接入方式(tmp_net_type_id)');
dbms_output.put_line('start...'); select
userorder_info.product_id,userorder_info.net_type_id into tmp_product_id,tmp_net_type_id
from
rt_UserOrder_info userorder_info
where
userorder_info.user_order_id = tmp_user_order_id; dbms_output.put_line('产品类型为--->'||tmp_product_id);
dbms_output.put_line('接入方式为--->'||tmp_net_type_id);
dbms_output.put_line('end...');
dbms_output.put_line(''); /*2.根据产品ID(tmp_product_id)、接入方式(tmp_net_type_id)、资源属性编码(tmp_in_res_attribute_code)
查询出业务资源种类编码(tmp_in_busi_res_kind_code)、原子资源value (tmp_in_atom_res_value)、资源属性表名称(tmp_in_res_table)、
资源属性表主键(tmp_in_res_table_pk)、资源属性字段(tmp_in_res_table_column)*/
dbms_output.put_line('2.根据产品ID(tmp_product_id)、接入方式(tmp_net_type_id)、资源属性编码(tmp_in_res_attribute_code)
查询出业务资源种类编码(tmp_in_busi_res_kind_code)、原子资源value (tmp_in_atom_res_value)、资源属性表名称(tmp_in_res_table)、
资源属性表主键(tmp_in_res_table_pk)、资源属性字段(tmp_in_res_table_column)');
dbms_output.put_line('start...'); select
rrcd.in_busi_res_kind_code,
rrcd.in_atom_res_value,
rrcd.in_res_table,
rrcd.in_res_table_pk,
rrcd.in_res_table_column
into
tmp_in_busi_res_kind_code,
tmp_in_atom_res_value,
tmp_in_res_table,
tmp_in_res_table_pk,
tmp_in_res_table_column
from
rt_ResReturnConfig_dict rrcd
where
rrcd.product_id = tmp_product_id and
rrcd.net_type_code = tmp_net_type_id and
rrcd.in_res_attribute_code = tmp_in_res_attribute_code; dbms_output.put_line('业务资源种类编码为--->'||tmp_in_busi_res_kind_code);
dbms_output.put_line('原子资源value为--->'||tmp_in_atom_res_value);
dbms_output.put_line('资源属性表名称为--->'||tmp_in_res_table);
dbms_output.put_line('资源属性表主键为--->'||tmp_in_res_table_pk);
dbms_output.put_line('资源属性字段为--->'||tmp_in_res_table_column);
dbms_output.put_line('end...');
dbms_output.put_line('');
/*3.根据用户订单号(tmp_user_order_id)和业务资源种类编码(tmp_in_busi_res_kind_code)从来确定资源ID(tmp_res_id)*/
dbms_output.put_line('3.根据用户订单号(tmp_user_order_id)和业务资源种类编码(tmp_in_busi_res_kind_code)从来确定资源ID(tmp_res_id)');
dbms_output.put_line('start...'); select
wri.res_id into tmp_res_id
from
rt_WorkRes_info wri
where
wri.user_order_id=tmp_user_order_id and
wri.res_kind_code=tmp_in_busi_res_kind_code; dbms_output.put_line('资源ID为--->'||tmp_res_id);
dbms_output.put_line('end...');
dbms_output.put_line('');
/*4.根据资源ID(tmp_res_id),确定原子资源种类(tmp_atom_res_kind_code)、以及它的资源值*/
dbms_output.put_line('4.根据资源ID(tmp_res_id),确定原子资源种类(tmp_atom_res_kind_code)、以及它的资源值');
dbms_output.put_line('start...'); tmp_sql := 'select wari.atom_res_kind_code,wari.'||tmp_in_atom_res_value||' from rt_WorkAtomRes_info wari where wari.res_id=:1';
execute immediate tmp_sql into tmp_atom_res_kind_code,tmp_value using tmp_res_id ; dbms_output.put_line('原子资源种类为--->'||tmp_atom_res_kind_code);
dbms_output.put_line('资源值value为--->'||tmp_value);
dbms_output.put_line('end...');
dbms_output.put_line('');
/*5.修改资源属性*/
dbms_output.put_line('5.修改资源属性');
dbms_output.put_line('start...'); tmp_sql := 'select '||tmp_in_res_table_column||' from '||tmp_in_res_table||' where '||tmp_in_res_table_pk||'=:1';
execute immediate tmp_sql into log_before_res_value using tmp_value ; tmp_sql := 'update '||tmp_in_res_table||' set '||tmp_in_res_table_column||'=:1 where '||tmp_in_res_table_pk||'=:2';
execute immediate tmp_sql using tmp_res_table_column_value,tmp_value ; dbms_output.put_line('修改之前的资源属性值为--->'||log_before_res_value);
dbms_output.put_line('修改之后的资源属性值为--->'||tmp_res_table_column_value);
dbms_output.put_line('修改资源属性成功!');
dbms_output.put_line('end...');
dbms_output.put_line('');
/*6.记录日志*/
dbms_output.put_line('6.记录日志');
dbms_output.put_line('start...'); tmp_sql := 'insert into rt_log_modifymissparam_his values(rt_log_resattributemodify_seq.nextval,:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14)' ;
execute immediate tmp_sql using tmp_user_order_id,tmp_product_id,tmp_net_type_id,tmp_in_res_table,tmp_in_res_table_pk,tmp_value,tmp_in_res_table_column,log_before_res_value,tmp_res_table_column_value,log_req_user,log_req_date,log_op_user,sysdate,'Y';
dbms_output.put_line('记录日志成功!');
dbms_output.put_line('end...');
dbms_output.put_line(''); end loop;
commit; exception
when others then
rollback;
dbms_output.put_line('执行失败!'||SQLERRM);
end;
/
public static void manyRecords(String sql,String arrayDescriptor,Object[][] params) {
try {
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url = "jdbc:oracle:thin:@133.64.153.69:1521:orcl"; // orcl为数据库的SID
String user = "irms_htb1";
String password = "irms_htb1";
Connection conn = DriverManager.getConnection(url, user, password);
CallableStatement pstmt = conn.prepareCall(sql);
oracle.sql.ArrayDescriptor desc = oracle.sql.ArrayDescriptor.createDescriptor(arrayDescriptor.toUpperCase(), conn);
oracle.sql.ARRAY array = new oracle.sql.ARRAY(desc, conn, params);
pstmt.setArray(1, array);
boolean flag = pstmt.execute();
System.out.println("调用存储过程"+(flag?"成功":"失败")+"!");
} catch (Exception e) {
e.printStackTrace();
} finally{
}
}
public static void main(String[] args) {
Object[][] object = new Object[1][6];
object[0][0] = "1009849262";
object[0][1] = "IFMII";
object[0][2] = "1";
object[0][3] = "1";
object[0][4] = new DATE();
object[0][5] = "处理人";
Test1.manyRecords("{call proc_modifyattribute(?)}","irms_type_ma_table", object);
}
user_order_id varchar2(20),
in_res_attribute_code varchar2(50),
res_value varchar2(50),
req_user varchar2(50),
req_date date,
op_user varchar2(50)
);
/
create or replace type irms_type_ma_table as table of irms_type_ma ;
/
create or replace procedure proc_modifyattribute(params in irms_type_ma_table)
as
tmp_user_order_id varchar(20); --入参user_order_id
tmp_in_res_attribute_code varchar(50); --入参in_res_attribute_code
tmp_res_table_column_value varchar(50); --入参tmp_res_table_column_value
tmp_product_id rt_UserOrder_info.product_id%type;
tmp_net_type_id rt_UserOrder_info.net_type_id%type;
tmp_in_busi_res_kind_code rt_ResReturnConfig_dict.in_busi_res_kind_code%type;
tmp_in_atom_res_value rt_ResReturnConfig_dict.in_atom_res_value%type;
tmp_in_res_table rt_ResReturnConfig_dict.in_res_table%type;
tmp_in_res_table_pk rt_ResReturnConfig_dict.in_res_table_pk%type;
tmp_in_res_table_column rt_ResReturnConfig_dict.in_res_table_column%type;
tmp_res_id rt_WorkRes_info.res_id%type;
tmp_atom_res_kind_code rt_WorkAtomRes_info.atom_res_kind_code%type;
tmp_value rt_WorkAtomRes_info.value1%type; --资源值
tmp_sql varchar2(1000); log_req_user varchar2(50);
log_req_date date;
log_op_user varchar2(50);
log_before_res_value varchar2(50); cursor curs is select * from the (
select cast (params as irms_type_ma_table) from dual
);
begin
for cur in curs loop
--赋值
tmp_user_order_id := cur.user_order_id ;
tmp_in_res_attribute_code := cur.in_res_attribute_code;
tmp_res_table_column_value := cur.res_value;
log_req_user := cur.req_user;
log_req_date := cur.req_date;
log_op_user := cur.op_user; --1.查询出某个用户订单对应的产品ID(product_id)、接入方式(net_type_id)
dbms_output.put_line('1.查询出某个用户订单对应的产品ID(tmp_product_id)、接入方式(tmp_net_type_id)');
dbms_output.put_line('start...'); select
userorder_info.product_id,userorder_info.net_type_id into tmp_product_id,tmp_net_type_id
from
rt_UserOrder_info userorder_info
where
userorder_info.user_order_id = tmp_user_order_id; dbms_output.put_line('产品类型为--->'||tmp_product_id);
dbms_output.put_line('接入方式为--->'||tmp_net_type_id);
dbms_output.put_line('end...');
dbms_output.put_line(''); /*2.根据产品ID(tmp_product_id)、接入方式(tmp_net_type_id)、资源属性编码(tmp_in_res_attribute_code)
查询出业务资源种类编码(tmp_in_busi_res_kind_code)、原子资源value (tmp_in_atom_res_value)、资源属性表名称(tmp_in_res_table)、
资源属性表主键(tmp_in_res_table_pk)、资源属性字段(tmp_in_res_table_column)*/
dbms_output.put_line('2.根据产品ID(tmp_product_id)、接入方式(tmp_net_type_id)、资源属性编码(tmp_in_res_attribute_code)
查询出业务资源种类编码(tmp_in_busi_res_kind_code)、原子资源value (tmp_in_atom_res_value)、资源属性表名称(tmp_in_res_table)、
资源属性表主键(tmp_in_res_table_pk)、资源属性字段(tmp_in_res_table_column)');
dbms_output.put_line('start...'); select
rrcd.in_busi_res_kind_code,
rrcd.in_atom_res_value,
rrcd.in_res_table,
rrcd.in_res_table_pk,
rrcd.in_res_table_column
into
tmp_in_busi_res_kind_code,
tmp_in_atom_res_value,
tmp_in_res_table,
tmp_in_res_table_pk,
tmp_in_res_table_column
from
rt_ResReturnConfig_dict rrcd
where
rrcd.product_id = tmp_product_id and
rrcd.net_type_code = tmp_net_type_id and
rrcd.in_res_attribute_code = tmp_in_res_attribute_code; dbms_output.put_line('业务资源种类编码为--->'||tmp_in_busi_res_kind_code);
dbms_output.put_line('原子资源value为--->'||tmp_in_atom_res_value);
dbms_output.put_line('资源属性表名称为--->'||tmp_in_res_table);
dbms_output.put_line('资源属性表主键为--->'||tmp_in_res_table_pk);
dbms_output.put_line('资源属性字段为--->'||tmp_in_res_table_column);
dbms_output.put_line('end...');
dbms_output.put_line('');
/*3.根据用户订单号(tmp_user_order_id)和业务资源种类编码(tmp_in_busi_res_kind_code)从来确定资源ID(tmp_res_id)*/
dbms_output.put_line('3.根据用户订单号(tmp_user_order_id)和业务资源种类编码(tmp_in_busi_res_kind_code)从来确定资源ID(tmp_res_id)');
dbms_output.put_line('start...'); select
wri.res_id into tmp_res_id
from
rt_WorkRes_info wri
where
wri.user_order_id=tmp_user_order_id and
wri.res_kind_code=tmp_in_busi_res_kind_code; dbms_output.put_line('资源ID为--->'||tmp_res_id);
dbms_output.put_line('end...');
dbms_output.put_line('');
/*4.根据资源ID(tmp_res_id),确定原子资源种类(tmp_atom_res_kind_code)、以及它的资源值*/
dbms_output.put_line('4.根据资源ID(tmp_res_id),确定原子资源种类(tmp_atom_res_kind_code)、以及它的资源值');
dbms_output.put_line('start...'); tmp_sql := 'select wari.atom_res_kind_code,wari.'||tmp_in_atom_res_value||' from rt_WorkAtomRes_info wari where wari.res_id=:1';
execute immediate tmp_sql into tmp_atom_res_kind_code,tmp_value using tmp_res_id ; dbms_output.put_line('原子资源种类为--->'||tmp_atom_res_kind_code);
dbms_output.put_line('资源值value为--->'||tmp_value);
dbms_output.put_line('end...');
dbms_output.put_line('');
/*5.修改资源属性*/
dbms_output.put_line('5.修改资源属性');
dbms_output.put_line('start...'); tmp_sql := 'select '||tmp_in_res_table_column||' from '||tmp_in_res_table||' where '||tmp_in_res_table_pk||'=:1';
execute immediate tmp_sql into log_before_res_value using tmp_value ; tmp_sql := 'update '||tmp_in_res_table||' set '||tmp_in_res_table_column||'=:1 where '||tmp_in_res_table_pk||'=:2';
execute immediate tmp_sql using tmp_res_table_column_value,tmp_value ; dbms_output.put_line('修改之前的资源属性值为--->'||log_before_res_value);
dbms_output.put_line('修改之后的资源属性值为--->'||tmp_res_table_column_value);
dbms_output.put_line('修改资源属性成功!');
dbms_output.put_line('end...');
dbms_output.put_line('');
/*6.记录日志*/
dbms_output.put_line('6.记录日志');
dbms_output.put_line('start...'); tmp_sql := 'insert into rt_log_modifymissparam_his values(rt_log_resattributemodify_seq.nextval,:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14)' ;
execute immediate tmp_sql using tmp_user_order_id,tmp_product_id,tmp_net_type_id,tmp_in_res_table,tmp_in_res_table_pk,tmp_value,tmp_in_res_table_column,log_before_res_value,tmp_res_table_column_value,log_req_user,log_req_date,log_op_user,sysdate,'Y';
dbms_output.put_line('记录日志成功!');
dbms_output.put_line('end...');
dbms_output.put_line(''); end loop;
commit; exception
when others then
rollback;
dbms_output.put_line('执行失败!'||SQLERRM);
end;
/
public static void manyRecords(String sql,String arrayDescriptor,Object[][] params) {
try {
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url = "jdbc:oracle:thin:@133.64.153.69:1521:orcl"; // orcl为数据库的SID
String user = "irms_htb1";
String password = "irms_htb1";
Connection conn = DriverManager.getConnection(url, user, password);
CallableStatement pstmt = conn.prepareCall(sql);
oracle.sql.ArrayDescriptor desc = oracle.sql.ArrayDescriptor.createDescriptor(arrayDescriptor.toUpperCase(), conn);
oracle.sql.ARRAY array = new oracle.sql.ARRAY(desc, conn, params);
pstmt.setArray(1, array);
boolean flag = pstmt.execute();
System.out.println("调用存储过程"+(flag?"成功":"失败")+"!");
} catch (Exception e) {
e.printStackTrace();
} finally{
}
}
public static void main(String[] args) {
Object[][] object = new Object[1][6];
object[0][0] = "1009849262";
object[0][1] = "IFMII";
object[0][2] = "1";
object[0][3] = "1";
object[0][4] = new DATE();
object[0][5] = "处理人";
Test1.manyRecords("{call proc_modifyattribute(?)}","irms_type_ma_table", object);
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货