Logika Standar

Thursday 17 March 2016

Java Memanggil Store Procedure Oracle Insert PL/SQL

Store Procedured adalah sebuah kelompok kode SQL yang di simpan di katalog database dan dapat di panggil kemudian oleh program, trigger atau bahkan stored procedure. Sebuah Stored Procedure yang memanggil dirinya sendiri disebut rekursif stored procedure.

Untuk langkah pertama, persiapkan Database beserta Table'nya:
 - table STUDENT didalam schema KAMPUS :
CREATE TABLE "KAMPUS"."STUDENT"
 (    "NIM" VARCHAR2(20 BYTE) NOT NULL ENABLE,
  "NAME" VARCHAR2(50 BYTE),
  "ADDRESS" VARCHAR2(100 BYTE),
   CONSTRAINT "STUDENT" PRIMARY KEY ("NIM")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "TB_SPACE"  ENABLE
 ) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "TB_SPACE" ;

Setelah itu, buat Store Procedure :

create or replace
PROCEDURE SP_STUDENT
(
nim_in         IN student.nim%type,
name_in        IN student.name%type,
address_in     IN student.address%type,
result_cursor  OUT SYS_REFCURSOR
)
AS
BEGIN
  INSERT INTO STUDENT  (
  nim,
  name,
  address
  )
  VALUES
  (
  nim_in,
  name_in,
  address_in
  );
 
  OPEN result_cursor FOR
  select 'success' as status from dual;
  EXCEPTION
    WHEN DUP_VAL_ON_INDEX THEN
     OPEN result_cursor FOR
        select 'error' as status from dual;
    
END;

Kemudian beralih ke Program Java, untuk memanggil Store Procedure yang telah kita buat tadi :

public Mahasiswa insert(Mahasiswa o) throws SQLException {
 
        //use store procedure oracle
        String insertMahasiswa = "{call kampus.sp_student(?,?,?,?)}";
        CallableStatement callableStatement = DatabaseUtilities.getConnection().prepareCall(insertMahasiswa);
        callableStatement.setString(1, o.getNim());
        callableStatement.setString(2, o.getNama());
        callableStatement.setString(3, o.getAlamat());
        callableStatement.registerOutParameter(4, OracleTypes.CURSOR);
        callableStatement.executeUpdate();
        ResultSet rs = (ResultSet) callableStatement.getObject(4);
        if(rs.next()){
        o.setStatus(rs.getString("status"));
        System.out.println(rs.getString("status"));
        }
        return o;
    }

Sekian Proses pemanggilan Store Procedure