Passing of BOOLEAN parameters to PL/SQL stored procedures

ปัญหาเกิดจาก function ใน oracle ที่เขียนขึ้นมานั้น มี parameter type เป็น boolean แต่ JDBC ไม่ support การส่งค่าแบบ boolean ไปใน function ถ้าทดลองส่งไปจะเกิด exception ประมาณนี้

java.sql.SQLException: ORA-06550: line 1, column 13:
PLS-00306: wrong number or types of arguments in call to 'FN_TEST'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
	at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:745)
	at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:218)

วิธีการแก้ปัญหาก็บ้านๆ มากครับ สร้าง function ที่รับ parameter ที่ไม่ใช่ boolean มาแล้ว ไปเรียก function ที่ต้องส่ง boolean เข้าไปอีกที่ ประมาณนี้

CREATE OR REPLACE FUNCTION boolFunc(x boolean)
RETURN VARCHAR2 AS
BEGIN
	//code 
	return "OK";
END;

CREATE OR REPLACE FUNCTION boolwrap(x int)
RETURN VARCHAR2 AS
BEGIN
	IF (x=1) THEN
	  return boolFunc(TRUE);
	ELSE
	  return boolFunc(FALSE);
	END IF;
END;

เวลาเรียกใช้งานก็ เรียก function boolwrap แทนที่ boolFunc

แหล้งข้อมูล
http://docs.oracle.com/cd/B19306_01/java.102/b14355/apxtblsh.htm#i1005380

  1. No comments yet.

  1. No trackbacks yet.