Dynamic SQL এর বাস্তব উদাহরণ

PL/SQL Dynamic SQL - পিএল/এসকিউএল (PL/SQL) - Database Tutorials

453

Dynamic SQL হল SQL কোড যা runtime এ তৈরি এবং এক্সিকিউট করা হয়, অর্থাৎ SQL স্টেটমেন্ট তৈরি করার সময় তার বিষয়বস্তু ডাইনামিকভাবে নির্ধারণ করা হয়। PL/SQL তে ডাইনামিক SQL ব্যবহৃত হয় যখন আপনি SQL স্টেটমেন্টের গঠন আগে থেকে জানেন না বা এটি runtime এ তৈরী করতে চান।

PL/SQL তে ডাইনামিক SQL এক্সিকিউট করার জন্য EXECUTE IMMEDIATE বা DBMS_SQL প্যাকেজ ব্যবহার করা হয়। সাধারণত EXECUTE IMMEDIATE ব্যবহার করা বেশি সহজ এবং জনপ্রিয়।


Dynamic SQL এর উদাহরণ:

উদাহরণ ১: EXECUTE IMMEDIATE দিয়ে Dynamic SQL

ধরা যাক, আমাদের একটি employees টেবিল আছে এবং আমরা এমন একটি SQL স্টেটমেন্ট চাই যা বিভিন্ন কলাম থেকে ডেটা রিটার্ন করবে, এবং আমরা কলামটি runtime এ নির্ধারণ করব।

DECLARE
    v_column_name VARCHAR2(30);  -- Variable to hold column name
    v_sql_query   VARCHAR2(200); -- Variable to hold dynamic SQL query
BEGIN
    v_column_name := 'salary';  -- Set the column name dynamically, could be any column like 'salary', 'first_name', etc.

    -- Constructing the SQL query dynamically
    v_sql_query := 'SELECT ' || v_column_name || ' FROM employees WHERE department_id = :dept_id';

    -- Executing the dynamic SQL query
    EXECUTE IMMEDIATE v_sql_query USING 10;  -- dept_id = 10 is passed as bind variable
END;

বিশদ ব্যাখ্যা:

  • এখানে v_column_name নামক একটি ভেরিয়েবল ব্যবহার করে আমরা ডাইনামিকভাবে কলামটি নির্ধারণ করছি।
  • v_sql_query তে আমরা ডাইনামিক SQL কুইরি তৈরি করছি।
  • EXECUTE IMMEDIATE ব্যবহার করে আমরা ডাইনামিক SQL কোডটি চালাচ্ছি, যেখানে :dept_id হলো একটি bind variable

উদাহরণ ২: Dynamic SQL with INSERT

ধরা যাক, আমাদের কাছে একটি টেবিল আছে এবং আমরা ডাইনামিকভাবে বিভিন্ন কলামে ডেটা ইনসার্ট করতে চাই।

DECLARE
    v_table_name VARCHAR2(30) := 'employees';  -- Table name
    v_column1    VARCHAR2(30) := 'employee_id'; -- Column 1
    v_column2    VARCHAR2(30) := 'first_name';  -- Column 2
    v_value1     NUMBER := 123;   -- Value for column 1
    v_value2     VARCHAR2(50) := 'John Doe'; -- Value for column 2
    v_sql_query  VARCHAR2(200);   -- Dynamic SQL query variable
BEGIN
    -- Constructing the dynamic SQL query for INSERT
    v_sql_query := 'INSERT INTO ' || v_table_name || ' (' || v_column1 || ', ' || v_column2 || ') VALUES (:val1, :val2)';
    
    -- Executing the dynamic SQL query
    EXECUTE IMMEDIATE v_sql_query USING v_value1, v_value2;
    
    DBMS_OUTPUT.PUT_LINE('Data inserted successfully!');
END;

বিশদ ব্যাখ্যা:

  • এখানে আমরা INSERT INTO কুইরি ডাইনামিকভাবে তৈরি করছি এবং কলাম ও টেবিলের নামও ডাইনামিকভাবে নির্ধারণ করছি।
  • EXECUTE IMMEDIATE দিয়ে ডাইনামিক SQL এক্সিকিউট করছি এবং bind variables হিসেবে v_value1 এবং v_value2 ব্যবহার করছি।

উদাহরণ ৩: Dynamic SQL with SELECT and Returning Data

এখন, যদি আমরা ডাইনামিক SQL ব্যবহার করে কোনো SELECT স্টেটমেন্ট চালাতে চাই এবং সেই ডেটা কিভাবে রিটার্ন করতে পারি, তা দেখানো যাক।

DECLARE
    v_column_name VARCHAR2(30) := 'salary';  -- The column to be fetched dynamically
    v_dept_id     NUMBER := 10;               -- Department ID
    v_salary      NUMBER;                     -- Variable to store result
    v_sql_query   VARCHAR2(200);              -- Dynamic SQL query variable
BEGIN
    -- Constructing dynamic SQL for SELECT query
    v_sql_query := 'SELECT ' || v_column_name || ' FROM employees WHERE department_id = :dept_id';

    -- Execute dynamic SQL and fetch the result into v_salary
    EXECUTE IMMEDIATE v_sql_query INTO v_salary USING v_dept_id;

    -- Output the result
    DBMS_OUTPUT.PUT_LINE('Salary of employee in department ' || v_dept_id || ' is: ' || v_salary);
END;

বিশদ ব্যাখ্যা:

  • এখানে আমরা SELECT কুইরি ডাইনামিকভাবে তৈরি করছি, যেখানে কলামটি এবং টেবিলের শর্ত runtime এ নির্ধারণ করা হয়েছে।
  • EXECUTE IMMEDIATE দিয়ে SQL কুইরি এক্সিকিউট করে আমরা INTO ক্লজ ব্যবহার করে ডেটা v_salary ভেরিয়েবলে রিটার্ন করছি।

Dynamic SQL এর সুবিধা:

  1. Flexibility: কোডে বিভিন্ন অংশ ডাইনামিকভাবে পরিবর্তন করতে সক্ষম হওয়া, যেমন টেবিল বা কলামের নাম runtime এ নির্ধারণ করা।
  2. Reusable Code: একই কোড দিয়ে বিভিন্ন ধরনের SQL কুইরি এক্সিকিউট করা সম্ভব।
  3. Complex Queries: জটিল বা পরিবর্তিত SQL কুইরি তৈরি করতে Dynamic SQL ব্যবহৃত হতে পারে।

Dynamic SQL এর নিরাপত্তা:

ডাইনামিক SQL ব্যবহারের সময় SQL Injection রোধ করতে বেশ কিছু সাবধানতা অবলম্বন করা উচিত:

  • Bind Variables ব্যবহার করা: যেভাবে উপরে দেখানো হয়েছে, :dept_id, :val1, :val2 এগুলোকে bind variables হিসেবে ব্যবহার করা SQL injection থেকে রক্ষা করে।
  • Validation: ইনপুট ভ্যালুগুলোর ভালোভাবে যাচাই করা উচিত যাতে তা অবাঞ্ছিত SQL কোড ইনজেকশনের সুযোগ না দেয়।

সারাংশ:

  • Dynamic SQL হল এমন SQL কোড যা runtime এ তৈরি এবং এক্সিকিউট করা হয়।
  • PL/SQL তে EXECUTE IMMEDIATE বা DBMS_SQL প্যাকেজ ব্যবহার করে ডাইনামিক SQL চালানো সম্ভব।
  • এটি flexibility এবং reusability প্রদান করে, বিশেষ করে যখন SQL কুইরির গঠন আগে থেকে জানা থাকে না।
Content added By
Promotion

Are you sure to start over?

Loading...