প্রোসিজারের মতো ডেটাবেসে ফাংশনও তৈরি করে সংরক্ষণ করা যায়।
সিনট্যাক্স
MySQL ডেটাবেসে ফাংশন তৈরির সিনট্যাক্স:
CREATE FUNCTION Function_Name(input_arguments) RETURNS output_parameter
BEGIN
declare variables;
statements ...
return data_type;
END
উদাহরণ
ধরি Emp নামক একটি টেবিল আছে নিচের কনটেন্টের সাথে:
+--------+------------+----------------+ | Name | DOB | Location | +--------+------------+----------------+ | Amit | 1970-01-08 | Hyderabad | | Sumith | 1970-01-08 | Vishakhapatnam | | Sudha | 1970-01-05 | Vijayawada | +--------+------------+----------------+
নিচে একটি ফাংশন তৈরির উদাহরণ দেওয়া হলো। এখানে getDob() নামে একটি ফাংশন তৈরি করা হয়েছে যা কর্মীর নাম গ্রহণ করে DOB কলামের মান বের করে রিটার্ন করে।
CREATE FUNCTION getDob(emp_name VARCHAR(50)) RETURNS DATE
BEGIN
declare dateOfBirth DATE;
select DOB into dateOfBirth from EMP where Name = emp_name;
return dateOfBirth;
END
JDBC ব্যবহার করে ফাংশন কল করা
প্রোসিজারের মতো CallableStatement অবজেক্ট ব্যবহার করে ফাংশন কল করা যায়। JDBC প্রোগ্রাম থেকে ফাংশন কল করতে হলে:
- ডেটাবেসের সাথে কানেক্ট করুন।
- PreparedStatement অবজেক্ট তৈরি করুন এবং এর কনস্ট্রাক্টরে ফাংশন কল স্ট্রিং ফরম্যাটে পাস করুন।
- প্লেসহোল্ডারগুলোর মান সেট করুন।
- Callable statement এক্সিকিউট করুন।
JDBC থেকে ফাংশন কল করার কোয়েরি:
{? = call getDob(?)}
উপরের কোয়েরিতে প্লেসহোল্ডার (?) আছে প্রিপেয়ার্ড ও কালেবল স্টেটমেন্টের মতো। প্রথম প্লেসহোল্ডার ফাংশনের রিটার্ন মানকে প্রতিনিধিত্ব করে এবং দ্বিতীয়টি ইনপুট প্যারামিটার।
রিটার্ন মানকে প্রতিনিধিত্বকারী প্লেসহোল্ডারকে আউটপুট প্যারামিটার হিসেবে রেজিস্টার করতে হয় registerOutParameter() মেথড ব্যবহার করে (CallableStatement ইন্টারফেসের)। এই মেথডে প্লেসহোল্ডারের পজিশন এবং SQL টাইপ পাস করতে হয়।
cstmt.registerOutParameter(1, Types.DATE);
ইনপুট প্যারামিটারের মান সেট করুন setString() মেথড ব্যবহার করে (যেহেতু getDob() ফাংশন VARCHAR টাইপ গ্রহণ করে)।
উদাহরণ
নিচের JDBC প্রোগ্রাম getDob ফাংশন এক্সিকিউট করে ফলাফল বের করে।
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Types;
public class CallingFunctionsUsingCallable2 {
public static void main(String args[]) throws SQLException {
// ড্রাইভার রেজিস্টার
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
// কানেকশন
String mysqlUrl = "jdbc:mysql://localhost/sampleDB";
Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
System.out.println("Connection established......");
// CallableStatement প্রস্তুত
CallableStatement cstmt = con.prepareCall("{? = call getDob(?)}");
cstmt.registerOutParameter(1, Types.DATE);
cstmt.setString(2, "Amit");
cstmt.execute();
System.out.print("Date of birth: " + cstmt.getDate(1));
}
}
আউটপুট
Connection established...... Date of birth: 1970-01-08