Stored Procedure হল একটি প্রি-কোম্পাইলড SQL স্টেটমেন্ট বা SQL কোডের একটি গ্রুপ যা ডেটাবেস সার্ভারের মধ্যে সংরক্ষিত থাকে এবং তখন ডেটাবেসে কোন অপারেশন সম্পাদন করতে ব্যবহার করা হয়। এটি একটি সি, জাভা, পিএইচপি ইত্যাদি প্রোগ্রামিং ভাষায় লেখা ফাংশনের মতো, তবে এটি ডেটাবেসে সংরক্ষিত থাকে এবং SQL কোয়েরি সমূহের একটি গ্রুপ থাকে যা পুনরায় একাধিক বার ব্যবহার করা যায়।
একটি Stored Procedure ডেটাবেসে সংরক্ষিত থাকে এবং ক্লায়েন্ট অ্যাপ্লিকেশন থেকে কল করা হয়। এটি ডেটাবেস সার্ভার দ্বারা এক্সিকিউট হয় এবং নির্দিষ্ট কাজ সম্পাদন করে, যেমন:
- ডেটা ইনসার্ট, আপডেট বা ডিলিট করা
- জটিল লগিক সম্পাদন করা
- ডেটাবেস রিসোর্স ম্যানেজমেন্ট
Stored Procedure এর বৈশিষ্ট্য:
- প্রি-কোম্পাইলড কোড: এটি ডেটাবেসে সংরক্ষিত থাকে এবং প্রি-কোম্পাইলড হওয়ায় দ্রুত এক্সিকিউট করা যায়।
- নিরাপত্তা: Stored Procedure এর মাধ্যমে ডেটাবেসের সাথে নিরাপদ যোগাযোগ করা যায়, কারণ ক্লায়েন্ট অ্যাপ্লিকেশন সরাসরি SQL কোড অ্যাক্সেস করতে পারে না।
- পুনঃব্যবহারযোগ্যতা: একবার তৈরি করা হলে এটি বারবার ব্যবহার করা যেতে পারে, যা কোড রিরিটিং কমিয়ে দেয়।
- ডেটাবেস লজিক: এটি ডেটাবেস লজিক এবং বিজনেস লজিককে একত্রিত করে, ডেটাবেসের মধ্যে জটিল প্রসেসিং করতে সক্ষম হয়।
- পফরম্যান্স উন্নয়ন: প্রি-কোম্পাইলড হওয়ায় ডেটাবেস এক্সিকিউশনের গতির উন্নতি ঘটতে পারে।
Stored Procedure এর প্রয়োগের কারণ:
১. পফরম্যান্স উন্নয়ন:
- Stored Procedure প্রি-কোম্পাইলড এবং অপটিমাইজড হওয়ায় এটি সাধারণ SQL কোয়েরির তুলনায় দ্রুত কার্যকরী হতে পারে। এতে নেটওয়ার্ক রাউন্ড ট্রিপ কমে এবং কর্মক্ষমতা বৃদ্ধি পায়।
২. নিরাপত্তা:
- Stored Procedure ব্যবহার করলে আপনি SQL ইনজেকশন আক্রমণ থেকে সুরক্ষিত থাকতে পারেন, কারণ প্রোগ্রামটি SQL কোড তৈরি করার পরিবর্তে স্টোরড প্রসিডিওর কল করে। ব্যবহারকারী সরাসরি SQL কোডে প্রবেশ করতে পারে না।
৩. কোড রক্ষণাবেক্ষণ এবং পুনঃব্যবহারযোগ্যতা:
- একবার Stored Procedure তৈরি হলে এটি বারবার ব্যবহার করা যেতে পারে, ফলে কোড পুনরায় লেখা বা কপি পেস্ট করার প্রয়োজন হয় না।
- Stored Procedure তে পরিবর্তন করলে এটি ডেটাবেসে পরিবর্তিত হবে এবং ক্লায়েন্ট অ্যাপ্লিকেশনে কোন পরিবর্তন করার প্রয়োজন নেই।
৪. বিজনেস লজিক ডেটাবেসে স্থানান্তর:
- কখনও কখনও, বিশেষত যখন জটিল বিজনেস লজিক বা ক্যালকুলেশন দরকার, তা ডেটাবেস স্তরে স্থাপন করা ভাল হতে পারে। এটি ডেটাবেস সার্ভারে প্রক্রিয়া করা হয়, যা অ্যাপ্লিকেশন থেকে আলাদা এবং স্কেলেবিলিটি বৃদ্ধি পায়।
৫. কন্ট্রোল এবং ডিবাগিং সহজ করা:
- ডেটাবেসে সংরক্ষিত থাকা এই কোডটি অ্যাপ্লিকেশনের কোড থেকে আলাদা থাকে, এবং এটি সাধারণত সহজে ডিবাগ এবং টেস্ট করা যায়।
Spring JDBC তে Stored Procedure কল করা:
স্প্রিং জেডিবিসি তে Stored Procedure কল করতে SimpleJdbcCall ক্লাস ব্যবহার করা হয়। এটি সহজে এবং কার্যকরভাবে স্টোরড প্রসিডিওর কল করতে সহায়ক।
উদাহরণ:
ধরা যাক, আমাদের একটি স্টোরড প্রসিডিওর রয়েছে যেটি একটি Employee টেবিল থেকে কোনো নির্দিষ্ট id এর কর্মচারীর ডেটা রিটার্ন করবে।
Stored Procedure SQL:
CREATE PROCEDURE GetEmployeeById(IN empId INT) BEGIN SELECT * FROM Employee WHERE id = empId; END;Spring JDBC তে Stored Procedure কল করার কোড:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.simple.SimpleJdbcCall; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; import java.util.Map; @Component public class EmployeeDao { @Autowired private JdbcTemplate jdbcTemplate; // Method to call stored procedure and get employee by ID public Employee getEmployeeById(int empId) { SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate) .withProcedureName("GetEmployeeById") .returningResultSet("result", new BeanPropertyRowMapper<>(Employee.class)); // Call stored procedure with input parameter Map<String, Object> result = jdbcCall.execute(empId); return (Employee) result.get("result"); } }
ব্যাখ্যা:
- এখানে
SimpleJdbcCallব্যবহার করা হয়েছেGetEmployeeByIdস্টোরড প্রসিডিওর কল করার জন্য। .withProcedureName("GetEmployeeById")দ্বারা আমরা স্টোরড প্রসিডিওরের নাম নির্দিষ্ট করি।.returningResultSet("result", new BeanPropertyRowMapper<>(Employee.class))এর মাধ্যমে ডেটাবেস থেকে রিটার্ন হওয়া রেজাল্ট ম্যানেজ করা হচ্ছে।
উপসংহার:
Stored Procedures ডেটাবেসে জটিল ক্যালকুলেশন এবং অপারেশনগুলো সংরক্ষণ করতে সাহায্য করে, যা কর্মক্ষমতা, নিরাপত্তা এবং রক্ষণাবেক্ষণকে উন্নত করে। এটি ডেটাবেস লজিক এবং বিজনেস লজিককে একত্রিত করে এবং কোডের পুনরায় ব্যবহারযোগ্যতা বাড়ায়। স্প্রিং জেডিবিসি তে Stored Procedures কল করতে SimpleJdbcCall ব্যবহার করা হয়, যা স্টোরড প্রসিডিওর কলের প্রক্রিয়াটি সহজ এবং কার্যকরী করে তোলে।
Read more