Java Call PL/SQL

การเรียก PL/SQL ในจาวา มีรูปแบบง่ายๆสองแบบ คือ
1. แบบไม่มีการคืนค่า ใช้รูปแบบ {call PL_NAME(?,?,?)}
เครื่องหมาย ? ในวงเล็บคือ parameter ที่จะทำการส่งไปให้ PL/SQL เวลาเรียกจาก Java จะเขียนเหมือน Code ตัวอย่างด้านล่าง

public void execute(Connection conn) throws SQLException{
 String plName = "{call PL_NAME(?,?,?)}";
 CallableStatement stmt = conn.prepareCall(plName);

 //set PL parameter & value
 stmt.setInt(1,5);
 stmt.setString(2,"TEST");
 stmt.setDate(3,new Date());
 stmt.execute();
 stmt.close();
}

2. แบบมีการคืนค่า ใช้รูปแบบ {? = call PL_NAME(?,?,?)}
เครื่องหมาย ? ในวงเล็บคือ parameter ที่จะทำการส่งไปให้ PL/SQL ส่วน ? ก่อน call นั้นคือค่าที่ return จาก PL/SQL เวลาเรียกจาก Java จะเขียนเหมือน Code ตัวอย่างด้านล่าง

public String execute(Connection conn) throws SQLException {
 String plName = "{? = call PL_NAME(?,?,?)}";
 CallableStatement stmt = conn.prepareCall(plName);
 //Set output data type
 stmt.registerOutParameter(1, OracleTypes.VARCHAR);

 //set PL parameter & value
 stmt.setInt(2,5);
 stmt.setString(3,"TEST");
 stmt.setDate(4,new Date());
 stmt.execute();
 String returnValue = stmt.getString(1);
 stmt.close();
 return returnValue;
}

หมายเหตุ :
1. registerOutParameter สามารถ return เป็นข้อมูลหลายแบบ เช่น Cursor , Double และ อื่นๆ
2. สังเกต หากไม่มีการคืนค่าจากการเรียก PL/SQL CallableStatementจะทำการ Set ค่า Parameter เริ่มจาก 1 และถ้ามีการคืนค่าจาก PL/SQL CallableStatementจะเริ่ม Set ค่า Parameter เริ่มจาก 2 เนื่องจากตำแหน่งที่ 1 นั้นเป็น output parameter ไปแล้ว

    • gookoong
    • September 10th, 2011

    ช่วยอธิบาย stmt หน่อยได้ไหมครับ ผมไม่รู้จัก ดูเว็บ eng ก็อ่านไม่ออก

  1. @gookoong
    หมายถึง CallableStatement หรือเปล่าครับ ถ้าใช่ CallableStatement เป็น class ที่เอาไว้ใช้งานกับการเรียก function หรือ store โดยตรงดังนั้นไม่ว่าจะเรียกใช้ Function หรือ Store ก็ต้องใช้ผ่าน CallableStatement

  1. No trackbacks yet.