Anonymous PL/SQL from JDBC Callable Statement

I can execute the block from PL/SQL and it works fine. Anyone encountered this problem.

DBConnectionManager connManager;
Connection conn;
String executeImmediate = new String();
CallableStatement stmt;
executeImmediate = "BEGIN FOR sRec IN (SELECT sid||', '||serial# ss " +
"FROM v$session WHERE username = 'SAMS') "+
"LOOP EXECUTE IMMEDIATE 'ALTER SYSTEM KILL SESSION "+
"'''||sRec.ss||''' IMMEDIATE'; " +
"END LOOP; END;";
System.out.println(executeImmediate);
try {
connManager = DBConnectionManager.getInstance();
conn = DBConnectionManager.getConnection();
conn.setAutoCommit(false);
stmt = conn.prepareCall(executeImmediate);
stmt.execute();
stmt.close();
conn.close();
}
catch (Exception e)
{e.printStackTrace();}

}
........shows the following output

BEGIN FOR sRec IN (SELECT sid||', '||serial# ss FROM v$session WHERE username = 'SAMS') LOOP EXECUTE IMMEDIATE 'ALTER SYSTEM KILL SESSION '''||sRec.ss||''' IMMEDIATE'; END LOOP; END;

.... the following execptions
java.sql.SQLException: ORA-01031: insufficient privileges
ORA-06512: at line 1

at oracle.jdbc.dbaccess.DBError.throwSqlException(DBE rror.java:169)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:2 08)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:543)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol .java:1405)
at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TT C7Protocol.java:822)
at oracle.jdbc.driver.OracleStatement.executeNonQuery (OracleStatement.java:1602)
at oracle.jdbc.driver.OracleStatement.doExecuteOther( OracleStatement.java:1527)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTi meout(OracleStatement.java:2045)
at oracle.jdbc.driver.OraclePreparedStatement.execute Update(OraclePreparedStatement.java:395)
at oracle.jdbc.driver.OraclePreparedStatement.execute (OraclePreparedStatement.java:446)
at SAMSinstall.kill_SAMS_sessions(SAMSinstall.java:48 )
at SAMSinstall.main(SAMSinstall.java:22)