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 ไปแล้ว
ช่วยอธิบาย stmt หน่อยได้ไหมครับ ผมไม่รู้จัก ดูเว็บ eng ก็อ่านไม่ออก
@gookoong
หมายถึง CallableStatement หรือเปล่าครับ ถ้าใช่ CallableStatement เป็น class ที่เอาไว้ใช้งานกับการเรียก function หรือ store โดยตรงดังนั้นไม่ว่าจะเรียกใช้ Function หรือ Store ก็ต้องใช้ผ่าน CallableStatement