สำหรับคนที่เคยใช้ ฐานข้อมูล oracle คงหนีไม่พ้นเรื่องการเขียน pl/sql ซึ่งก็เป็นจุ่นเด่นของ oracle เค้าว่าอย่างนั้น แต่มีนักพัฒนาไม่น้อยที่
ไม่จำเป็นต้องรู้จักหรือต้องเรียนรู้การเขียน pl/sql รู้แต่เพียงว่าเรียกใช้ procedure/function pl/sql เท่านั้น
ปัญหาอย่างหนึ่งระหว่าง java กับ oracle คือการเรียกใช้ function ใน oracle ที่มี Return type เป็น boolean ซึ่งเค้าว่ากันว่า java ยังไม่ support
การเรียกใช้ Return type ที่เป็น boolean นี่อาจเป็นวิธีทางแก้อีก หนึ่งทางเลือกสำหรับนักพัฒนาคือการเขียน pl/sql ครอบระหว่างการเรียนใช้ function ของ orcle
ซึ่งในตัวอย่างประกอบไปด้วย
1. pl/sql function ที่ return ค่าเป็น boolean
2. การเรียกใช้โดยใช้ java
--สร้าง ประกาศ function และสร้าง package
create or replace
PACKAGE PKG_TEST AS
FUNCTION F_GET_TEST_BOOL(P_SALARY1 IN NUMBER, P_SALARY2 OUT VARCHAR2) RETURN BOOLEAN;
END PKG_TEST;
/***********************************************/
--สร้าง body และสร้าง function F_GET_TEST_BOOL โดย return type ที่เป็น boolean
create or replace
PACKAGE BODY PKG_TEST AS
FUNCTION F_GET_TEST_BOOL(P_SALARY1 IN NUMBER, P_SALARY2 OUT VARCHAR2)
RETURN BOOLEAN AS
B_RESULT BOOLEAN := TRUE;
BEGIN
IF P_SALARY1>1500 THEN
P_SALARY2 := 'salary1 > 1500 bath';
ELSE
P_SALARY2 := 'salary1 < 1500 bath';
B_RESULT := FALSE;
END IF;
RETURN B_RESULT;
END F_GET_TEST_BOOL;
END PKG_TEST;
//เรียกใช้ จากโดย java set parameter in,out,และ return type
package com.test;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import oracle.jdbc.OracleTypes;
public class TEST_CALL_FBOOL {
//สร้าง connection method เพื่อ connec oracle
private static Connection conn()
{
String conStr;
Connection conn;
try
{
//สร้าง url connection
conStr = "jdbc:oracle:thin:@localhost:1521:orcl";
//register class dirver
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
//connection & return
return conn = DriverManager.getConnection(conStr, "system", "root");
}
catch(Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//การเรียนใช้
P_CALL_FUNCTION_BOOL();
}
//สร้าง method สำหรับ เรียกใช้ fuction PL/SQL
public static void P_CALL_FUNCTION_BOOL()
{
//ประกาศ call prepared
CallableStatement cstmt = null;
//ประกาศ connection
Connection conn = null;
try {
//connection
conn =conn();
// -------------------------------------------------------------
// Call PL/SQL Function to retrieve {?= call function(?,?...n)}
// -------------------------------------------------------------
//F_GET_TEST_BOOL(P_SALARY1 IN NUMBER, P_SALARY2 OUT VARCHAR2)
//วิธีแก้ไขสำหรับการเรียน function จาก pl/sql ที่มี return type เป็น boolean เราจะทำการเขียน pl/sql คลอบ function ที่ต้องการเรียกใช้
//และมีการ return type เป็น varchar แทน ในตัวอย่าง ประกาศ ตัวเเปรที่ชื่อ B_VAL เป็น boolean เพื่อรับค่าจาก function ที่ return type เป็น boolean
//โดย function มี argument ที่เป็น IN(P_SALARY1) และ OUT(P_SALARY2) จากนั้น ก็ทำการ check if B_VAL เป็นจริงหรือไม่ ถ้าเป็นจริงให้ ตัวแปร ? มีค่าเป็น "T" String เพื่อ Return
//ค่าให้ java ใช้งาน
// prepared call
cstmt = conn.prepareCall("DECLARE B_VAL BOOLEAN; " +
"BEGIN B_VAL := PKG_TEST.F_GET_TEST_BOOL(?,?);" +
"IF (B_VAL) THEN ? := 'T'; END IF; END;");
//register input parameters
cstmt.setInt(1,1000);
//register output parameters
cstmt.registerOutParameter(2, OracleTypes.VARCHAR);
//register Return type
cstmt.registerOutParameter(3, OracleTypes.VARCHAR);
// Execute and retrieve the returned values
cstmt.execute();
System.out.println("******************************************8");
String result1 = cstmt.getString(2); //OUT parameter
String result2 = cstmt.getString(3); //Return type เื่พื่อทำไป check แล้วใช้งานต่อไป(ที่ได้จากการเรียก function)
//หมายเหตุ ถ้าเป็น True จะได้ String = 'T' แต่ถ้าเป็น False มีค่าเป็น null
System.out.println("Result Output param:"+result1);
System.out.println("Result Return Type:"+result2);
//close
cstmt.close();
conn.close();
}
catch (SQLException e)
{
System.out.println("'ERROR':"+e.toString());
}
}
}
ตัวอย่างสำหรับการเรียกใช้ function ของ pl/sql ที่มีการ Return type เป็น boolean โดยใช้ ภาษา java
สมัครสมาชิก:
ส่งความคิดเห็น (Atom)
ไม่มีความคิดเห็น:
แสดงความคิดเห็น