Oracle + JDBC

Innate
Дата: 20.09.2004 20:22:04
Привет всем!

Кто-нибудь может объяснить такое:

Есть таблица в Oracle и к ней последовательность:
drop table p;
create table p
(
  num int not null unique
);

drop sequence num_seq;
create sequence num_seq
  start with 1
  increment by 1;

и хранимая процедура:

create or replace procedure insnew( v_num out int )
as
  l_num int;
begin
  declare
  begin
    select num_seq.nextval into l_num from sys.dual;
    v_num := l_num;
    insert into p( num ) values( l_num );
  exception
    when others then
      rollback;
      raise;
  end;
commit;
end insnew;

и маленькая программка на Java:

import java.lang.*;
import java.sql.*;

public class E
{
  public static void main( String[] args )
  {
    Connection con = null;
    CallableStatement cstmt = null;
    try
    {
      Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
      con = DriverManager.getConnection( args[ 0 ]);
      cstmt = con.prepareCall( "{call insnew( ? )}");
      cstmt.registerOutParameter( 1, java.sql.Types.INTEGER );
      for( int i = 0; i < 10; ++i )
      {
        cstmt.executeUpdate();
        System.out.println( cstmt.getInt( 1 ));
      } 
    }
    catch( SQLException sqle )
    {
      System.out.println( sqle.getErrorCode());
      System.out.println( sqle.getMessage());
    }
    catch( Exception e )
    {
      System.out.println( e.getMessage());
    }
    finally
    {
      try
      {
        if( cstmt != null )
          cstmt.close();
        if(( con != null ) && ( !con.isClosed()))
          con.close();
      }
      catch( SQLException sqle )
      {}
    }
  }
}

Программка просто вставляет 10 записей в табличку в Oracle через JDBC-ODBC мост.

Запускаю программку:
java -jar e.jar "jdbc:odbc:orcl;user=*****/****"

и получаю в выводе десять штук единиц. Причем, в таблицу записи вставляются правильно. Только мне возвращают всегда 1.

Oracle 9i, WIndowsXP.

Почему так происходит?