Java コードの場合:
CallableStatement cs=null;
int bcode=1;
int dcode=3;
int noftab=3;
String sql2 = "{? = call public.insertdepttables('"+bcode+"','"+dcode+"','"+noftab+"')}";
cs = conn.prepareCall(sql2);
cs.registerOutParameter(1,Types.INTEGER);
rset1=cs.getInt(1);
system.out.println("success="+rest1);
insertdepttables 内:(私の db-postgresql 内の関数)
CREATE OR REPLACE FUNCTION public.insertdepttables
(
IN branch_code integer,
IN dept_code integer,
IN no_tables integer
)
RETURNS integer AS
$$
DECLARE
count integer;
begin
IF no_tables>0 THEN
LOOP
insert into t_dept_tables(branch_code,dept_code,table_no)values(branch_code,dept_code,no_tables);
no_tables=no_tables-1;
Count=count+1;
EXIT when no_tables =0;
END LOOP ;
END IF;
RETURN count;
end
$$
実際には、postgresql の t_dept_tables に no_table (つまり、3) 回の行を挿入する必要があります。だから私がやったことは、データベースに関数を書いたことです。Javaコードから呼び出す必要があります。そこで、呼び出し可能な stmt を使用しました。
私の出力はdbで次のようになります。
bcode dcode table_no
1 3 1
1 3 2
1 3 3
Javaコードを実行しているときに、次のような結果が得られます。
コンソール:
success=3
しかし、3行はdbに挿入されませんが、dbで関数を実行しているときに値が挿入されます。私のdb関数に問題はありません。これを整理するのを手伝ってください。