oracle格納プロセスは、配列タイプのtypeを利用して、大量挿入データベースを実現します。
Oracleには配列タイプがありません。配列タイプのパラメータを渡すには、自分で定義しなければなりません。oracleではデータタイプtypeを定義します。コードは以下の通りです。
VERAYにしましょう
typeを作ったら、私達はもう一つのpackageを作成します。
次はjavaコードです。ここではjdbcで取得したconnectionを使っています。oracleのconnectionなどのエラー情報はネットでは存在しません。
1.エラーメッセージが発生しました。「無効な名前パターン」の原因:配列typeの名前が正しくないか、または大文字でないか、声明してください。array typeはすべての文字を大文字にしなければなりません。質問があればoracle公式サイトを見に行きましょう。
2.nls_を一つ追加するcharsett 12.jar包、さもなくばデータに挿し込むことができない問題が現れて、ネット上のあるものはorai 18 n.jarをプラスすると言って、しかし私はプラスしていないようで、正常に中英文のデータを挿入することができて、nls_charsett 12.jar包下载
おかみさんの文章を紹介します。http://blog.csdn.net/hzw2312/article/details/8444462 超詳しく書いてあります
CREATE OR REPLACE TYPE ARRAY_BARCODEID is table of varchar2(50);
配列の長さを考えないやり方はテーブルを使うことです。VERAYにしましょう
typeを作ったら、私達はもう一つのpackageを作成します。
CREATE OR REPLACE PACKAGE delivery AS
procedure addRecords_delivery(
v_orderId IN varchar2,--
v_barcodeIds in array_barcodeId,--
v_deliveryListNo IN varchar2,--
v_boxId IN varchar2,--
v_boxName IN varchar2,--
v_s_num out int,--
v_returnMsg out varchar2-- ,
);
END;
package bodyコード:create or replace package body delivery is
procedure addRecords_delivery(
v_orderId in varchar2,--
v_barcodeIds in array_barcodeId,--
v_deliveryListNo in varchar2,--
v_boxId in varchar2,--
v_boxName in varchar2,--
v_s_num out int,
v_returnMsg out varchar2)-- , )--
is
v_count int;
v_id int;
begin
v_s_num:=0;
v_returnMsg:='';
for i in 1..v_barcodeIds.Count loop
select count(barcodeId) into v_count from ptparts where barcodeId=v_barcodeIds(i) and orderId=v_orderId;
if v_count!=0 then
select listid.nextval into v_id from dual;
insert into ptdeliverylist(id,deliverylistno,barcodeid,boxid,boxname) values(v_id,v_deliverylistno,v_barcodeIds(i),v_boxid,v_boxname);
v_s_num := v_s_num + 1;
else
v_returnMsg:=v_returnMsg||v_barcodeIds(i)||',';
end if;
end loop;
end addRecords_delivery;
end;
格納プロセスの主な機能は、行列内の条件を満たすデータをデータベースに挿入し、条件を満たしていないものを文字列で返すことである。次はjavaコードです。ここではjdbcで取得したconnectionを使っています。oracleのconnectionなどのエラー情報はネットでは存在しません。
public class createArrayTypeForProduce {
public static void main(String[] args){
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@10.112.0.222:1521:ORCL";
Connection con = DriverManager.getConnection(url, "wms", "server110");
CallableStatement proc = null;
String sql = "{call delivery.addRecords_delivery(?,?,?,?,?,?,?)}";
proc = con.prepareCall(sql);
Object[] s = new Object[7];
s[0] = "DFG/GSG656126412001-1001202";
s[1] = "DFG/GSG656126412001-1001203";
s[2] = "DFG/GSG656126412001-1001204";
s[3] = "DFG/GSG656126412001-1001205";
s[4] = "333";
s[5] = "44";
s[6] = "555";
// Object[][] s = {{"111","111"}};
// s[0][0] = " 1";
// s[0][1] = " 2";
ArrayDescriptor desc = ArrayDescriptor.createDescriptor("ARRAY_BARCODEID", con);// , “ ”
ARRAY arr = new ARRAY(desc, con, s);
proc.setString(1, "DFG/GSG656126412001");//
proc.setObject(2, arr, Types.ARRAY);//
proc.setString(3, "20141120153305");//
proc.setString(4, " ");//
proc.setString(5, " ");//
proc.registerOutParameter(6, Types.INTEGER);
proc.registerOutParameter(7, Types.VARCHAR);
proc.execute();
int s_num = proc.getInt(6);
String msg = proc.getString(7);
System.out.println(" ="+s_num);
System.out.println(" ="+msg);
proc.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
には2つの注意点があります。1.エラーメッセージが発生しました。「無効な名前パターン」の原因:配列typeの名前が正しくないか、または大文字でないか、声明してください。array typeはすべての文字を大文字にしなければなりません。質問があればoracle公式サイトを見に行きましょう。
2.nls_を一つ追加するcharsett 12.jar包、さもなくばデータに挿し込むことができない問題が現れて、ネット上のあるものはorai 18 n.jarをプラスすると言って、しかし私はプラスしていないようで、正常に中英文のデータを挿入することができて、nls_charsett 12.jar包下载
おかみさんの文章を紹介します。http://blog.csdn.net/hzw2312/article/details/8444462 超詳しく書いてあります