Procedimiento almacenado de Java llamando en el programa java

Lo que debo hacer es crear un procedimiento almacenado de Java y luego llamarlo desde el programa Java.

Estoy teniendo problemas al ejecutar el programa JAVA - JDBCPiemers (abajo) con 1 parámetro (Necesito salir del String Nosaukums). Error: "Nombre de columna no válido".

Llamar al procedimiento en ORACLE funciona bien.

Este es mi procedimiento almacenado que he cargado en la base de datos.

import java.sql.*;
import java.io.*;

public class BeerBeer {

  public static void getBreweryInfo (int Raz_ID) 
    throws SQLException 
    { String sql = 
      "SELECT Nosaukums FROM Alus_razotaji WHERE ID = ?";//vaicajums
    try { Connection conn = DriverManager.getConnection("jdbc:default:connection:"); // Izveidojam savienojumu ar datubāzi
      PreparedStatement apstmt = conn.prepareStatement(sql);
      apstmt.setInt(1, Raz_ID); 
      ResultSet rset = apstmt.executeQuery();// SQL vaicājuma izpildīšana

      rset.close();
      apstmt.close(); //Savienojuma aizvēršana
      } 
    catch (SQLException e) {System.err.println(e.getMessage()); //Kļūdu izvadīsana
    }  
  }
}

He creado un siguiente paquete con oracle.

CREATE OR REPLACE PACKAGE BeerBeer AS
PROCEDURE getBreweryInfo(Raz_ID number);
END BeerBeer;

CREATE OR REPLACE PACKAGE BODY BeerBeer AS
PROCEDURE getBreweryInfo(Raz_ID number) AS Language Java
NAME 'BeerBeer.getBreweryInfo(int)';
END BeerBeer;

Este es mi programa Java en el que invoco el procedimiento. Sin embargo no puedo hacerlo funcionar. Recibo el error: "Índice de columna no válido"

package client;

import java.sql.*;

public class JDBCPiemers {
    // Norādam URL draiverim un datu bāzei
    static final String JDBC_DRIVER = "oracle.jdbc.OracleDriver";
    static final String DB_URL = "jdbc:oracle:thin:@localhost:1521:ORCL";
    // Izveidojam norādi uz datu bāzes lietotājvārdu un paroli
    static final String USER = "SYSTEM";
    static final String PASS = "asdasd";
    private String sql;

    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Connection conn = null;
        CallableStatement stmt = null;
        try {
            //Reģistrējam JDBC draiveri
            Class.forName("oracle.jdbc.driver.OracleDriver");
            System.out.println("Izveidojam savienojumu ar datubazi ...");
            conn = DriverManager.getConnection(DB_URL, USER, PASS);
            // Vaicājuma izveide
            System.out.println("Komandas veidosana...");
            String SQL = "{CALL BeerBeer.getBreweryInfo (?)}";
            stmt = conn.prepareCall(SQL);
            int Raz_ID = 4;
            stmt.setInt(1, Raz_ID);
            stmt.registerOutParameter(2, java.sql.Types.VARCHAR);
            System.out.println("Izpildam JAVA glabajamo proceduru ...");
            // Vaicājuma izpilde
            stmt.execute();
            //Izgustam Alus_razotaja nosaukumu ar getXXX metodi.
            String Razotajs = stmt.getString(2);
            System.out.println("Izvadam rezultatus ...");
            System.out.println("Identifikatoram NR. " +Raz_ID + " atbilst Alus_Razotajs ar nosaukumu  '" + Razotajs + "'" );            
            stmt.close();
            conn.close(); }
            catch(SQLException se) {
                //Kludu apstrade JDBC
                se.printStackTrace(); }
            catch(Exception e) {
                //Kludu apstrade klasei Class.forName
                e.printStackTrace(); }
            finally {
                // Bloks, lai aizvērtu resursus
                try {if(stmt!=null)
                stmt.close(); }
            catch(SQLException se2) {} 
                try {if(conn!=null)
                conn.close(); }
                catch(SQLException se) {se.printStackTrace(); }
                //finally bloka beigas
            } // try 
            System.out.println("Darbu beidzam."); }}

Respuestas a la pregunta(2)

Su respuesta a la pregunta