Dynamic SQL হল একটি প্রক্রিয়া যেখানে SQL কোড রানটাইমে তৈরি এবং এক্সিকিউট করা হয়। এটি বিশেষভাবে তখন প্রয়োজনীয় যখন আপনি একাধিক SQL কুয়েরি চালাতে চান, যেগুলি ডাইনামিকভাবে তৈরি হয়, অর্থাৎ টেবিল বা কলাম নাম নির্ধারণ করতে হয় বা কুয়েরি গুলির আর্গুমেন্ট ভিন্ন হয়।
REST API Integration এর মাধ্যমে আপনি আপনার ডেটাবেসকে একটি ওয়েব সার্ভিস হিসেবে অ্যাক্সেস করতে পারেন, যেখানে আপনি HTTP রিকোয়েস্ট (যেমন GET, POST, PUT, DELETE) পাঠিয়ে ডেটাবেসের ডেটা অ্যাক্সেস বা ম্যানিপুলেট করতে পারবেন।
এখানে Dynamic SQL এবং REST API Integration এর মাধ্যমে কীভাবে ডেটাবেস থেকে ডাইনামিক SQL কুয়েরি রান করা এবং REST API এর মাধ্যমে রেসপন্স পাওয়া যায়, তার একটি উদাহরণ দেখানো হলো।
উদাহরণ: Dynamic SQL ব্যবহার করে REST API তৈরি করা
ধরা যাক, আমাদের একটি employees টেবিল রয়েছে এবং আমরা একটি RESTful API তৈরি করতে চাই, যা GET রিকোয়েস্টের মাধ্যমে টেবিল থেকে ডাইনামিকভাবে কর্মচারীদের ডেটা ফেরত দেবে, এমনকি কলাম নাম বা শর্তও ডাইনামিকভাবে পরিবর্তন হবে।
১. PL/SQL ব্লক তৈরি করা: Dynamic SQL with REST API
PL/SQL কোড:
এখানে আমরা PL/SQL ব্লক ব্যবহার করে ডাইনামিক SQL কুয়েরি তৈরি করব এবং ORDS এর মাধ্যমে এটি API হিসেবে এক্সপোজ করব।
CREATE OR REPLACE PROCEDURE get_employee_data (
p_column_name IN VARCHAR2,
p_value IN VARCHAR2
) AS
v_sql VARCHAR2(4000);
v_cursor SYS_REFCURSOR;
BEGIN
-- Dynamic SQL Query construction
v_sql := 'SELECT * FROM employees WHERE ' || p_column_name || ' = :value';
-- Execute dynamic SQL
OPEN v_cursor FOR v_sql USING p_value;
-- Fetch and output the result (Optional: Return as JSON)
FOR rec IN v_cursor LOOP
DBMS_OUTPUT.PUT_LINE('Employee ID: ' || rec.employee_id || ', Name: ' || rec.first_name || ' ' || rec.last_name);
END LOOP;
CLOSE v_cursor;
END;
/
এই কোডে আমরা p_column_name এবং p_value প্যারামিটার নিয়েছি। প্যারামিটারগুলির মাধ্যমে ডাইনামিক SQL কুয়েরি তৈরি করা হয়, এবং সেই কুয়েরি চালানো হয়।
যেমন যদি আপনি কলাম হিসেবে department_id এবং মান হিসেবে 90 পাঠান, তখন কুয়েরি হবে:
SELECT * FROM employees WHERE department_id = 90;
২. ORDS API তৈরি করা: REST API Definition
ORDS ব্যবহার করে, আমরা এই PL/SQL প্রোসিডিউরটি একটি RESTful API হিসেবে প্রকাশ করব।
BEGIN
ORDS.DEFINE_SERVICE(
p_module_name => 'Employee_Module',
p_base_path => '/employees/',
p_pattern => 'data/',
p_source_type => 'PLSQL',
p_source => 'BEGIN get_employee_data(:column_name, :value); END;'
);
END;
/
এটি একটি REST API তৈরি করবে, যেখানে column_name এবং value প্যারামিটার হিসেবে পাঠানো হবে। API URL হবে:
http://localhost:8080/ords/hr/employees/data/?column_name=department_id&value=90
এটি HTTP GET রিকোয়েস্টের মাধ্যমে department_id কলামের জন্য 90 মানের সাথে সমস্ত কর্মচারীর তথ্য ফিরিয়ে দেবে।
৩. HTTP GET Request Example
API ব্যবহার করে, আপনি HTTP GET রিকোয়েস্ট পাঠাতে পারবেন:
GET http://localhost:8080/ords/hr/employees/data/?column_name=department_id&value=90
এটি JSON আউটপুটে কর্মচারীদের তালিকা ফিরিয়ে দেবে:
[
{
"employee_id": 101,
"first_name": "John",
"last_name": "Doe",
"email": "jdoe@example.com",
"department_id": 90
},
{
"employee_id": 102,
"first_name": "Jane",
"last_name": "Smith",
"email": "jsmith@example.com",
"department_id": 90
}
]
৪. POST Method Example for Dynamic SQL
ধরা যাক, আপনি একটি POST রিকোয়েস্ট পাঠাতে চান, যা একটি নতুন কর্মচারী employees টেবিলে ইনসার্ট করবে এবং সেই ইনসার্ট ডেটার ID ফেরত দেবে।
PL/SQL Procs:
CREATE OR REPLACE PROCEDURE insert_employee (
p_first_name IN VARCHAR2,
p_last_name IN VARCHAR2,
p_email IN VARCHAR2,
p_salary IN NUMBER
) AS
BEGIN
INSERT INTO employees (first_name, last_name, email, salary)
VALUES (p_first_name, p_last_name, p_email, p_salary);
COMMIT;
END;
/
ORDS API Creation for POST:
BEGIN
ORDS.DEFINE_SERVICE(
p_module_name => 'Employee_Module',
p_base_path => '/employees/',
p_pattern => 'insert/',
p_source_type => 'PLSQL',
p_source => 'BEGIN insert_employee(:first_name, :last_name, :email, :salary); END;'
);
END;
/
এটি একটি POST API তৈরি করবে, যেখানে আপনি কর্মচারীর নাম, ইমেইল, এবং বেতন পাঠাতে পারবেন।
API URL:
POST http://localhost:8080/ords/hr/employees/insert
POST Data (JSON Format):
{
"first_name": "Michael",
"last_name": "Jordan",
"email": "mjordan@example.com",
"salary": 15000
}
এটি ডেটাবেসে নতুন কর্মচারী ইনসার্ট করবে।
উপসংহার
এখানে আমরা দেখলাম কীভাবে Dynamic SQL ব্যবহার করে ডাইনামিকভাবে SQL কুয়েরি তৈরি করা এবং ORDS (Oracle REST Data Services) এর মাধ্যমে সেই কুয়েরি একটি REST API হিসেবে এক্সপোজ করা যায়। এটি একটি শক্তিশালী পদ্ধতি যেখানে SQL কুয়েরি পরিবর্তনশীল (ডাইনামিক) হতে পারে, এবং API ব্যবহারকারীরা HTTP রিকোয়েস্টের মাধ্যমে এই ডেটা অ্যাক্সেস বা ম্যানিপুলেট করতে পারেন।
ORDS এর মাধ্যমে SQL ও PL/SQL কোডকে ওয়েব সার্ভিস হিসেবে প্রকাশ করা খুবই সহজ, এবং এটি ডেটাবেস অ্যাপ্লিকেশনগুলিকে আরো স্কেলেবল এবং ইন্টিগ্রেটেড করে তোলে।
Read more