উত্তর:
সঞ্চিত পদ্ধতিগুলি এসকিউএল স্টেটমেন্টগুলির একটি ব্যাচ যা কয়েকটি উপায়ে কার্যকর করা যেতে পারে। সর্বাধিক বড় ডিবিএমগুলি সঞ্চিত প্রক্রিয়া সমর্থন করে; যাইহোক, সব না। নির্দিষ্টকরণের জন্য আপনাকে আপনার নির্দিষ্ট ডিবিএমএস সহায়তা ডকুমেন্টেশন সহ যাচাই করতে হবে। আমি এসকিউএল সার্ভারের সাথে সর্বাধিক পরিচিত হিসাবে আমি সেটিকে আমার নমুনা হিসাবে ব্যবহার করব।
একটি সঞ্চিত প্রক্রিয়া তৈরি করতে সিনট্যাক্সটি মোটামুটি সহজ:
CREATE PROCEDURE <owner>.<procedure name>
<Param> <datatype>
AS
<Body>
উদাহরণস্বরূপ:
CREATE PROCEDURE Users_GetUserInfo
@login nvarchar(30)=null
AS
SELECT * from [Users]
WHERE ISNULL(@login,login)=login
সঞ্চিত পদ্ধতির একটি সুবিধা হ'ল আপনি একটি অ্যাক্সেসের মাধ্যমে ডেটা অ্যাক্সেস লজিককে কেন্দ্রিয় করতে পারেন যা ডিবিএর পক্ষে অনুকূলকরণ করা সহজ। সঞ্চিত পদ্ধতিগুলির একটি সুরক্ষার সুবিধাও রয়েছে যে আপনি কোনও সঞ্চিত পদ্ধতিতে মৃত্যুদন্ড কার্যকর করার অধিকার দিতে পারেন তবে ব্যবহারকারীর অন্তর্নিহিত টেবিলগুলিতে পড়ার / লেখার অনুমতি থাকতে হবে না। এটি এসকিউএল ইঞ্জেকশনের বিরুদ্ধে একটি ভাল প্রথম পদক্ষেপ।
সঞ্চিত পদ্ধতিগুলি মূলত আপনার বেসিক সিআরইউডির সাথে সম্পর্কিত রক্ষণাবেক্ষণগুলি ডাউনসাইড সহ আসে অপারেশনের । আসুন প্রতিটি টেবিলে আপনার একটি সন্নিবেশ, আপডেট, মুছুন এবং প্রাথমিক কী এর উপর ভিত্তি করে কমপক্ষে একটি নির্বাচন করুন, তার অর্থ প্রতিটি টেবিলে 4 টি পদ্ধতি থাকবে। এখন 400 টেবিলের একটি শালীন আকারের ডাটাবেস নিন এবং আপনার 1600 পদ্ধতি রয়েছে! এবং এটি ধরে নিয়েছে যে আপনার কাছে এমন নকল নেই যা সম্ভবত আপনি পাবেন।
এখানে আপনার ORC বা অন্য কোনও পদ্ধতি ব্যবহার করে আপনার বুনিয়াদি সিআরইউডি ক্রিয়াকলাপটি স্বয়ংক্রিয়ভাবে উত্পন্ন করতে এক টন যোগ্যতা রয়েছে।
একটি সঞ্চিত পদ্ধতি হ'ল প্রাকম্পম্পাইল এসকিউএল স্টেটমেন্টগুলির একটি সেট যা একটি বিশেষ কার্য সম্পাদন করতে ব্যবহৃত হয়।
উদাহরণ: আমার যদি একটি Employee
টেবিল থাকে
Employee ID Name Age Mobile
---------------------------------------
001 Sidheswar 25 9938885469
002 Pritish 32 9178542436
প্রথমে আমি Employee
টেবিলটি পুনরুদ্ধার করছি :
Create Procedure Employee details
As
Begin
Select * from Employee
End
এসকিউএল সার্ভারে পদ্ধতিটি চালানোর জন্য:
Execute Employee details
--- (Employee details is a user defined name, give a name as you want)
তারপরে দ্বিতীয়, আমি কর্মী সারণীতে মানটি প্রবেশ করিয়ে দিচ্ছি
Create Procedure employee_insert
(@EmployeeID int, @Name Varchar(30), @Age int, @Mobile int)
As
Begin
Insert Into Employee
Values (@EmployeeID, @Name, @Age, @Mobile)
End
এসকিউএল সার্ভারে প্যারামিট্রাইজড পদ্ধতিটি চালানোর জন্য:
Execute employee_insert 003,’xyz’,27,1234567890
--(Parameter size must be same as declared column size)
উদাহরণ: @Name Varchar(30)
ইন Employee
টেবিল Name
কলামের আকার হতে হবে varchar(30)
।
একটি সঞ্চিত পদ্ধতি হ'ল এসকিউএল স্টেটমেন্টগুলির একটি গোষ্ঠী যা ডেটাবেসে তৈরি এবং সংরক্ষণ করা হয়েছিল। একটি সঞ্চিত পদ্ধতি ইনপুট পরামিতিগুলি গ্রহণ করবে যাতে একক পদ্ধতিটি বিভিন্ন ইনপুট ডেটা ব্যবহার করে বেশ কয়েকটি ক্লায়েন্টের দ্বারা নেটওয়ার্কে ব্যবহার করা যায়। সঞ্চিত পদ্ধতিগুলি নেটওয়ার্ক ট্র্যাফিককে হ্রাস করবে এবং কার্যকারিতা বাড়িয়ে তুলবে। আমরা যদি একটি সঞ্চিত পদ্ধতিটি পরিবর্তন করি তবে সমস্ত ক্লায়েন্ট আপডেট হওয়া সঞ্চিত পদ্ধতিটি পেয়ে যাবে।
সঞ্চিত পদ্ধতি তৈরির নমুনা
CREATE PROCEDURE test_display
AS
SELECT FirstName, LastName
FROM tb_test;
EXEC test_display;
সঞ্চিত পদ্ধতি ব্যবহারের সুবিধা
একটি সঞ্চিত পদ্ধতি মডিউলার প্রোগ্রামিংয়ের অনুমতি দেয়।
আপনি একবারে পদ্ধতিটি তৈরি করতে পারেন, এটি ডাটাবেসে সঞ্চয় করতে পারেন এবং আপনার প্রোগ্রামে যেকোন বার কল করতে পারেন।
একটি সঞ্চিত পদ্ধতি দ্রুত কার্যকরকরণের অনুমতি দেয়।
যদি ক্রিয়াকলাপে পুনরাবৃত্তি সঞ্চালিত হয় এমন প্রচুর পরিমাণে এসকিউএল কোডের প্রয়োজন হয়, সঞ্চিত পদ্ধতিগুলি দ্রুততর হতে পারে। যখন তারা প্রথম সম্পাদন করা হয় তখন এগুলি পার্স এবং অপ্টিমাইজ করা হয় এবং সঞ্চিত পদ্ধতির সংকলিত সংস্করণ পরে ব্যবহারের জন্য মেমরি ক্যাশে থাকে। এর অর্থ হ'ল সঞ্চিত পদ্ধতিটি প্রতিটি ব্যবহারের সাথে পুনরায় বিতরণ এবং পুনরায় চালু করার প্রয়োজন হয় না, ফলস্বরূপ দ্রুত সঞ্চালনের সময়গুলি খুব দ্রুত ঘটে।
সঞ্চিত পদ্ধতিটি নেটওয়ার্ক ট্র্যাফিককে হ্রাস করতে পারে।
নেটওয়ার্কের মাধ্যমে কয়েকশ লাইন কোডের প্রেরণ না করে একটি ক্রিয়াকলাপে কোডটি কার্যকর করে এমন একক স্টেটমেন্টের মাধ্যমে ট্রানজ্যাক্ট-এসকিউএল কোডের কয়েকশ লাইনের প্রয়োজন থাকা একটি ক্রিয়াকলাপ সম্পাদন করা যেতে পারে।
সঞ্চিত পদ্ধতিগুলি আপনার ডেটাতে আরও ভাল সুরক্ষা সরবরাহ করে
ব্যবহারকারীদের সরাসরি প্রক্রিয়াটির বিবৃতি সরাসরি কার্যকর করার অনুমতি না থাকলেও কোনও সঞ্চিত প্রক্রিয়া সম্পাদন করার অনুমতি দেওয়া যেতে পারে।
এসকিউএল সার্ভারে আমাদের বিভিন্ন ধরণের সঞ্চিত পদ্ধতি রয়েছে:
সিস্টেম- সজ্জিত পদ্ধতিগুলি মাস্টার ডাটাবেসে সংরক্ষণ করা হয় এবং এগুলি একটি sp_
উপসর্গ দিয়ে শুরু হয় । এই পদ্ধতিগুলি সিস্টেম টেবিলগুলিতে বহিরাগত অ্যাপ্লিকেশন কলগুলির জন্য এসকিউএল সার্ভার ফাংশন সমর্থন করার জন্য বিভিন্ন কার্য সম্পাদন করতে ব্যবহার করা যেতে পারে
উদাহরণ: sp_helptext [সঞ্চিতপ্রসারণ_নাম]
ব্যবহারকারীর সংজ্ঞায়িত সঞ্চিত পদ্ধতিগুলি সাধারণত একটি ব্যবহারকারী ডাটাবেজে সংরক্ষণ করা হয় এবং সাধারণত ব্যবহারকারী ডাটাবেজে কাজগুলি সম্পূর্ণ করার জন্য ডিজাইন করা হয়। যদিও কোডিং এই পদ্ধতি ব্যবহার করবেন নাsp_
প্রিফিক্স কারন যদি আমরা ব্যবহার sp_
উপসর্গ প্রথমত, এটা মাস্টার ডাটাবেসের চেক করবে, এবং তারপর এটি ব্যবহারকারীর সংজ্ঞায়িত ডাটাবেসের সাথে আসে।
বর্ধিত সঞ্চিত পদ্ধতি হ'ল প্রক্রিয়া যা ডিএলএল ফাইলগুলি থেকে ফাংশন কল করে। আজকাল, বর্ধিত সঞ্চিত প্রক্রিয়াগুলি বর্ধিত সঞ্চিত প্রক্রিয়াগুলি ব্যবহার করা এড়ানো ভাল reason
সাধারণত, সঞ্চিত পদ্ধতিটি একটি "এসকিউএল ফাংশন"। তাদের আছে:
-- a name
CREATE PROCEDURE spGetPerson
-- parameters
CREATE PROCEDURE spGetPerson(@PersonID int)
-- a body
CREATE PROCEDURE spGetPerson(@PersonID int)
AS
SELECT FirstName, LastName ....
FROM People
WHERE PersonID = @PersonID
এটি একটি টি-এসকিউএল কেন্দ্রিক উদাহরণ। সঞ্চিত পদ্ধতিগুলি বেশিরভাগ এসকিউএল স্টেটমেন্টগুলি, রিটার্ন স্কেলার এবং টেবিল-ভিত্তিক মানগুলি কার্যকর করতে পারে এবং এটিকে আরও সুরক্ষিত বলে মনে করা হয় কারণ তারা এসকিউএল ইঞ্জেকশন আক্রমণগুলিকে প্রতিরোধ করে।
এরকম পরিস্থিতি নিয়ে ভাবুন,
বিঃদ্রঃ:
একটি সঞ্চিত প্রক্রিয়াটি মূলত একটি ডেটাবেজে কিছু নির্দিষ্ট কার্য সম্পাদন করতে ব্যবহৃত হয়। উদাহরণ স্বরূপ
একটি সঞ্চিত পদ্ধতিটি এসকিউএল বিবৃতিগুলির একটি গোষ্ঠী ছাড়া একক বাস্তবায়ন পরিকল্পনায় সংকলিত কিছুই নয়।
উদাহরণ: একটি সঞ্চিত পদ্ধতি তৈরি করা
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE GetEmployee
@EmployeeID int = 0
AS
BEGIN
SET NOCOUNT ON;
SELECT FirstName, LastName, BirthDate, City, Country
FROM Employees
WHERE EmployeeID = @EmployeeID
END
GO
একটি সঞ্চিত পদ্ধতি পরিবর্তন বা সংশোধন করুন:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE GetEmployee
@EmployeeID int = 0
AS
BEGIN
SET NOCOUNT ON;
SELECT FirstName, LastName, BirthDate, City, Country
FROM Employees
WHERE EmployeeID = @EmployeeID
END
GO
সঞ্চিত পদ্ধতিটি ড্রপ বা মুছুন:
DROP PROCEDURE GetEmployee
একটি সঞ্চিত পদ্ধতি হ'ল এক বা একাধিক এসকিউএল স্টেটমেন্টের একটি পূর্বনির্ধারিত সেট যা কিছু নির্দিষ্ট কাজ সম্পাদন করে।
একটি সঞ্চিত পদ্ধতি ব্যবহার করে একা একা চালানো উচিত EXEC
একটি সঞ্চিত পদ্ধতি একাধিক পরামিতি ফিরে আসতে পারে
লেনদেন বাস্তবায়নের জন্য একটি সঞ্চিত পদ্ধতি ব্যবহার করা যেতে পারে
"সঞ্চিত পদ্ধতি কী" এর উত্তর এখানে ইতিমধ্যে দেওয়া হয়েছে। আমি যা পোস্ট করব তা হ'ল সঞ্চিত পদ্ধতি ব্যবহারের একটি কম জ্ঞাত উপায়। এটা হয় grouping stored procedures
বা numbering stored procedures
।
সিনট্যাক্স রেফারেন্স
; number
অনুযায়ী এই
Optionচ্ছিক পূর্ণসংখ্যা যা একই নামের গ্রুপ পদ্ধতিতে ব্যবহৃত হয়। এই গ্রুপযুক্ত পদ্ধতিগুলি একটি ড্রপ প্রক্রিয়া বিবৃতি ব্যবহার করে একসাথে বাদ দেওয়া যেতে পারে
উদাহরণ
CREATE Procedure FirstTest
(
@InputA INT
)
AS
BEGIN
SELECT 'A' + CONVERT(VARCHAR(10),@InputA)
END
GO
CREATE Procedure FirstTest;2
(
@InputA INT,
@InputB INT
)
AS
BEGIN
SELECT 'A' + CONVERT(VARCHAR(10),@InputA)+ CONVERT(VARCHAR(10),@InputB)
END
GO
ব্যবহার
exec FirstTest 10
exec FirstTest;2 20,30
ফলাফল
অন্য একটি প্রচেষ্টা
CREATE Procedure SecondTest;2
(
@InputA INT,
@InputB INT
)
AS
BEGIN
SELECT 'A' + CONVERT(VARCHAR(10),@InputA)+ CONVERT(VARCHAR(10),@InputB)
END
GO
ফলাফল
এমএসজি 2730, স্তর 11, রাজ্য 1, পদ্ধতি দ্বিতীয় টেস্ট, লাইন 1 [ব্যাচ স্টার্ট লাইন 3] 2 এর একটি গ্রুপ সংখ্যা সহ পদ্ধতি 'সেকেন্ড টেস্ট' তৈরি করতে পারে না কারণ একই নাম এবং 1 এর গ্রুপ সংখ্যা সহ একটি পদ্ধতি বর্তমানে বিদ্যমান নেই ডাটাবেস প্রথমে ক্রিট প্রক্রিয়া 'সেকেন্ড টেস্ট' চালিত করতে হবে;
তথ্যসূত্র :
সতর্ক করা
একটি সঞ্চিত পদ্ধতি হ'ল এসকিউএল স্টেটমেন্ট এবং পদ্ধতিগত যুক্তির একটি নামযুক্ত সংগ্রহ, যা সংকলিত, যাচাই করা হয়েছে এবং সার্ভার ডাটাবেসে সঞ্চিত। একটি সঞ্চিত পদ্ধতিটি সাধারণত অন্যান্য ডাটাবেস অবজেক্টের মতো আচরণ করা হয় এবং সার্ভার সুরক্ষা ব্যবস্থার মাধ্যমে নিয়ন্ত্রণ করা হয়।
একটি ডিবিএমএসে, একটি সঞ্চিত পদ্ধতি হ'ল এসকিউএল স্টেটমেন্টগুলির একটি সেট করা নাম সহ যা সংকলিত আকারে ডাটাবেসে সঞ্চিত থাকে যাতে এটি বেশ কয়েকটি প্রোগ্রামের মাধ্যমে ভাগ করা যায়।
সঞ্চিত পদ্ধতি ব্যবহারে সহায়ক হতে পারে
ডেটাতে নিয়ন্ত্রিত অ্যাক্সেস সরবরাহ করা (শেষ ব্যবহারকারীরা কেবল ডেটা প্রবেশ বা পরিবর্তন করতে পারবেন তবে পদ্ধতিগুলি লিখতে পারবেন না)
ডেটা অখণ্ডতা নিশ্চিতকরণ (ডেটা ধারাবাহিকভাবে প্রবেশ করা হবে) এবং
উত্পাদনশীলতা উন্নত করে (সঞ্চিত পদ্ধতির বিবৃতি কেবল একবার লিখতে হবে)
সহজ জন্য,
সঞ্চিত পদ্ধতি করছে প্রোগ্রাম সংরক্ষিত , একটি প্রোগ্রাম / ফাংশন ডাটাবেসের মধ্যে সংরক্ষণ করা হয়।
প্রতিটি সঞ্চিত প্রোগ্রামে একটি শরীর থাকে যা একটি এসকিউএল বিবৃতি ধারণ করে। এই বিবৃতিটি সেমিকোলন (;) অক্ষর দ্বারা পৃথক পৃথক বিবৃতি নিয়ে গঠিত যৌগিক বিবৃতি হতে পারে।
CREATE PROCEDURE dorepeat(p1 INT)
BEGIN
SET @x = 0;
REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
END;
এসকিউএল সার্ভারে সঞ্চিত পদ্ধতিগুলি ইনপুট পরামিতিগুলি গ্রহণ করতে এবং আউটপুট প্যারামিটারের একাধিক মান প্রদান করতে পারে; এসকিউএল সার্ভারে, ডাটাবেসটিতে ক্রিয়াকলাপ সম্পাদন করতে এবং কলিং পদ্ধতি বা ব্যাচের স্থিতির মান ফিরিয়ে আনার জন্য কার্যপ্রণালী প্রোগ্রামের বিবৃতি সঞ্চিত করে।
এসকিউএল সার্ভারে সঞ্চিত পদ্ধতি ব্যবহারের সুবিধা
তারা মডিউলার প্রোগ্রামিংয়ের অনুমতি দেয়। তারা দ্রুত কার্যকর করার অনুমতি দেয় allow তারা নেটওয়ার্ক ট্র্যাফিক হ্রাস করতে পারে। এগুলি সুরক্ষা ব্যবস্থা হিসাবে ব্যবহার করা যেতে পারে।
এখানে সঞ্চিত পদ্ধতির উদাহরণ যা প্যারামিটার নেয়, একটি ক্যোয়ারী চালায় এবং ফলাফলটি ফেরত দেয়। বিশেষত, সঞ্চিত পদ্ধতিটি BusinessEntityID কে প্যারামিটার হিসাবে গ্রহণ করে এবং অনুরোধকৃত কর্মীকে ফিরিয়ে দেওয়ার জন্য হিউম্যানআরসোর্সেস -Employee টেবিলের প্রাথমিক কীটির সাথে মেলে এটি ব্যবহার করে।
> create procedure HumanResources.uspFindEmployee `*<<<---Store procedure name`*
@businessEntityID `<<<----parameter`
as
begin
SET NOCOUNT ON;
Select businessEntityId, <<<----select statement to return one employee row
NationalIdNumber,
LoginID,
JobTitle,
HireData,
From HumanResources.Employee
where businessEntityId =@businessEntityId <<<---parameter used as criteria
end
আমি এটি প্রয়োজনীয় ডটকম থেকে শিখেছি ... এটি খুব দরকারী।
সজ্জিত পদ্ধতিতে বিবৃতি কেবল একবার লেখা হয় এবং ক্লায়েন্ট এবং সার্ভারের মধ্যে নেটওয়ার্ক ট্র্যাফিক হ্রাস করে। আমরা এসকিএল ইনজেকশন আক্রমণগুলি এড়াতে পারি।
ORM
পছন্দEntity Framework
করতে চানCRUD
?