"সঞ্চিত পদ্ধতি" এবং "সঞ্চিত কার্য" এর মধ্যে পার্থক্য কী?


36

সুতরাং এই প্রশ্নের একটি মন্তব্যে উল্লেখ করা হয়েছে যে পোস্টগ্র্রেএসকিউএল-এ "সঞ্চিত প্রক্রিয়াজাতকরণ" এবং "সঞ্চিত ফাংশন" এর মধ্যে কিছুটা পার্থক্য রয়েছে।

উইকিপিডিয়া নিবন্ধের সাথে মন্তব্যটির লিঙ্কগুলি কিন্তু এর কিছু প্রয়োগ করার মতো বলে মনে হচ্ছে না (যেমন তারা কোনও SELECTবিবৃতিতে ব্যবহার করতে পারে ) can

সিনট্যাক্স নিজেই একটি সামান্য বিট বিভ্রান্তিকর হবে বলে মনে হচ্ছে:

CREATE FUNCTION emp_stamp() RETURNS trigger AS $emp_stamp$
    BEGIN
       [...]
    END;
$emp_stamp$ LANGUAGE plpgsql;

CREATE TRIGGER emp_stamp BEFORE INSERT OR UPDATE ON emp
    FOR EACH ROW EXECUTE PROCEDURE emp_stamp();

আপনি একটি তৈরি FUNCTIONকিন্তু এটি হিসাবে উল্লেখ করুন PROCEDURE

তাহলে এই দুজনের মধ্যে পার্থক্য কী?

উত্তর:


43

অফিসিয়ালি, পোস্টগ্রিসকিউএলএর কেবল "ফাংশন" রয়েছে। ট্রিগার ফাংশনগুলিকে মাঝে মাঝে "ট্রিগার পদ্ধতি" হিসাবে উল্লেখ করা হয়, তবে সেই ব্যবহারের আলাদা কোনও অর্থ নেই। অভ্যন্তরীণভাবে, ফাংশনগুলিকে কখনও কখনও পদ্ধতি হিসাবে উল্লেখ করা হয়, যেমন সিস্টেম ক্যাটালগের মতো pg_proc। এটি পোস্টকোয়েল থেকে একটি হোল্ডওভার। কিছু বৈশিষ্ট্য যা কিছু লোক (সম্ভবত বিভিন্ন ডাটাবেস সিস্টেমে অভিজ্ঞতার সাথে) পদ্ধতিগুলির সাথে সংযুক্ত হতে পারে যেমন এসকিউএল ইনজেকশন প্রতিরোধের জন্য তাদের প্রাসঙ্গিকতা বা আউটপুট প্যারামিটারগুলির ব্যবহার পোস্টগ্র্রেএসকিউএল-তে উপস্থিত রয়েছে সেগুলি ফাংশনেও প্রযোজ্য।

এখন, যখন পোস্টগ্র্যাস এসকিউএল সম্প্রদায়ের লোকেরা "সঞ্চিত পদ্ধতি" বা "প্রকৃত সঞ্চিত পদ্ধতি" সম্পর্কে কথা বলেন, তবে তারা প্রায়শই কোনও ফাংশন-জাতীয় অবজেক্টের একটি অনুমান বৈশিষ্ট্য বোঝায় যা তার দেহে লেনদেন শুরু করতে এবং বন্ধ করতে পারে, যা বর্তমান ক্রিয়াকলাপগুলি পারে না না। এই প্রসঙ্গে "সঞ্চিত পদ্ধতি" শব্দটির ব্যবহার অন্যান্য ডাটাবেস পণ্যগুলির সাথে সাদৃশ্য হিসাবে উপস্থিত বলে মনে হয়। একটি অস্পষ্ট ধারণা জন্য এই মেইলিং তালিকা থ্রেড দেখুন ।

বাস্তবে, তবে, লেনদেন-নিয়ন্ত্রণের ক্ষমতাগুলির ক্ষেত্রে ফাংশন বনাম প্রক্রিয়াটির এই পার্থক্য সর্বজনীনভাবে গৃহীত হয় না এবং অবশ্যই ডাটাবেস পক্ষপাতবিহীন অনেক প্রোগ্রামারই কোনও ফাংশন হিসাবে রিটার্ন মান ব্যতীত একটি পাস্কালের মতো ব্যাখ্যা গ্রহণ করবেন। (এসকিউএল স্ট্যান্ডার্ডটি একটি মাঝারি স্থল গ্রহণ করবে বলে মনে হয় যে ডিফল্টরূপে একটি কার্যক্রমে কোনও ফাংশনের চেয়ে আলাদা লেনদেনের আচরণ থাকে তবে এটি প্রতি বস্তুর সাথে সামঞ্জস্য করা যায়)) সুতরাং যে কোনও ক্ষেত্রে এবং বিশেষত স্ট্যাক এক্সচেঞ্জের প্রশ্নগুলির দিকে তাকালে খুব মিশ্র শ্রোতাদের, আপনার অত্যধিক অনুমান করা এড়ানো উচিত এবং আরও পরিষ্কার শর্তাদি ব্যবহার করা উচিত বা আপনি যে বৈশিষ্ট্যগুলি প্রত্যাশা করেন তার সংজ্ঞা দিন।


14

ডিডিএলের ক্ষেত্রে, পোস্টগ্রিসের পদ্ধতিগত সামগ্রী নেই, কেবলমাত্র ফাংশন। পোস্টগ্র্যাস ফাংশনগুলি মান (গুলি) বা অকার্যকর করতে পারে যাতে তারা অন্য আরডিবিএমএসে উভয় ফাংশন এবং পদ্ধতিগুলির ভূমিকা গ্রহণ করে। শব্দ 'পদ্ধতি' create triggerএকটি ফাংশন বোঝায়।

পোস্টগ্রিস ডকুমেন্টেশনের ক্ষেত্রে, 'পদ্ধতি' এটি একটি ফাংশন নামে পরিচিত ডাটাবেস অবজেক্টের প্রতিশব্দ, যেমন: " ক্রিয়েট ফাংশন কমান্ড দিয়ে একটি ট্রিগার পদ্ধতি তৈরি করা হয় " "

ট্রিগার 'পদ্ধতিগুলি'র নির্দিষ্ট বিধি রয়েছে: এগুলি অবশ্যই কোনও তর্ক হিসাবে এবং কোনও রিটার্ন টাইপ ট্রিগার ছাড়াই একটি ফাংশন হিসাবে ঘোষণা করতে হবে । উদাহরণ এখানে


8

"সঞ্চিত প্রক্রিয়া" এবং "সঞ্চিত ফাংশন" পদগুলি পোস্টগ্রিজ এসকিউএল এ বিনিময়যোগ্য হিসাবে ব্যবহৃত হয় এবং সাধারণত একই জিনিসটিকে বোঝাতে ব্যবহৃত হয়। অন্যান্য ডাটাবেসগুলি একটি পদ্ধতি এবং ফাংশনের মধ্যে পার্থক্য করতে পারে (অনেকটা ভিবি সাব্রোটাইন এবং ফাংশনগুলির মধ্যে কীভাবে পার্থক্য করে)।

যতক্ষণ PostgreSQL এ কোনও ফাংশন কোনও টেবিলের অনুরূপ কিছু ফেরত দেয় আপনি সেই ফাংশনের আউটপুটটি ব্যবহার করতে পারেন যেন এটি কোনও মানক টেবিল। CREATE TRIGGERসিনট্যাক্স একটু বিভ্রান্তিকর, কিন্তু আমি সন্দেহ এটা জায়গায় হয়তো সামনে ANSI মান ধার্য করা হয়। আমার কাছে কেবল এসকিউএল: 2003 এর একটি অনুলিপি রয়েছে, সুতরাং নামকরণ কেন অদ্ভুত তা অনুমান করার চেয়ে আমি বেশি কিছু করতে পারি না।

টিএল; ডিআর সংস্করণ: পোস্টগ্রিএসকিউএল সহ "পদ্ধতি" "ফাংশন" এর সমতুল্য।


6

এমএসএসকিউএল-এ একটি সঞ্চিত পদ্ধতিটি স্কিল কমান্ডগুলির একটি পূর্ব-সংকলিত সেট।
একটি সঞ্চিত পদ্ধতি:

 - অনেক ইনপুট এবং আউটপুট পরামিতি থাকতে পারে
 - ডাটাবেস সারণি / কাঠামো / ডেটা পরিবর্তন করতে ব্যবহার করা যেতে পারে
 - সন্নিবেশ / আপডেট / মোছা / নির্বাচন বিবরণীর ভিতরে সাধারণত ব্যবহৃত হয় না
ব্যবহারকারীর সংজ্ঞায়িত ফাংশনগুলি বিভিন্ন স্বাদে আসে। ফাংশন লিখিত, ধরণের উপর নির্ভর করে:
  - একাধিক ইনপুট প্যারামিটার থাকতে পারে, তবে কেবলমাত্র একটি একক মান (অর্থাত্ স্ট্রিং কনকেন্টেশন) প্রদান করে
  - একটি ইনপুট হিসাবে একটি সেট গ্রহণ করতে পারে, একটি একক মান (যেমন dbo.FindLargestPig (listOfPigs)) ফেরত দিতে পারে
  - একটি সারণী ফিরিয়ে দিন (উদাহরণস্বরূপ dbo থেকে * নির্বাচন করুন xp এক্সপ্লোডস্ট্রিং ("এটি শব্দের একটি তালিকা"))
  - নির্বাচন / সন্নিবেশ / আপডেট / বিবৃতি মুছতে ব্যবহৃত হতে পারে
  - ডাটাবেস সারণি / কাঠামো / ডেটা পরিবর্তন করতে ব্যবহার করা যাবে না


5

সংক্ষিপ্ত উত্তরটি হ'ল কোনও ফাংশনটি একটি মান দেয়, তবে কোনও প্রক্রিয়া দেয় না।

এই পার্থক্যটি প্রসিস্টেন্ট স্টোরড মডিউলগুলিতে (এসকিউএল / পিএসএম) উপস্থিত ছিল, যা এসকিউএল 1992 এর জন্য প্রস্তাবিত হয়েছিল S এসকিউএল / পিএসএম এটি কখনও মানগুলিতে তৈরি করেছিল কিনা তা আমি জানি না।


2003 এর মধ্যে আমি বিশ্বাস করি
xenoterracide

এটি উল্লেখযোগ্যভাবে ভিবির জন্য সিনট্যাক্সের মতো শোনাচ্ছে। একটি ফাংশন একটি মান দেয় এবং একটি পদ্ধতি দেয় না (সুতরাং কোনও ফাংশনে যদি আপনার ফেরতের মান থাকে তবে এটি
সংকলকটিতে ফুঁকতে পারে

@ জকোলেব্রানড আসলে, নামগুলি পাস্কলে আরও স্পষ্ট। একটি কার্যক্রিয়া ফল দেয় না, যখন একটি ফাংশন করে। ঐতিহাসিক কারণে, VBA ফোরট্রান ভাষার, যা কল ব্যবহার (যাকে বলা হয়?) তাদের সাবরুটিন & ফাংশনটির । আধুনিক সি-টাইপ ল্যাঙ্গুয়েজে কেবল ফাংশন রয়েছে তবে টাইপ করা ভাষাগুলিতে শূন্য ফাংশনগুলির বিকল্প রয়েছে যা অন্য নামে প্রক্রিয়া। একটি জনপ্রিয় প্রবণতা হ'ল কেবলমাত্র সমস্ত কিছুর জন্য সাধারণ ক্রিয়াকলাপগুলি ব্যবহার করা এবং এমন কিছু ফিরিয়ে দেওয়া যা আপনি চাইলে উপেক্ষা করা যায়।
মাংগো

2

বিমূর্ত ধারণাগত স্তর থেকে গৃহীত উত্তরের তুলনা করে, আমি কার্যকারিতা এবং ইনপুট / আউটপুট দৃষ্টিকোণ থেকে পার্থক্য বুঝতে পারি। আমি নীচে যথাক্রমে সঞ্চিত পদ্ধতি এবং ফাংশন উপস্থাপন করতে এসপি এবং এফ ব্যবহার করেছি।

  1. একটি অভিব্যক্তিতে ব্যবহার করুন: ফাংশন করতে পারে এমন সময় একটি এক্সপ্রেশনে এসপি ব্যবহার করা যায় না, যার অর্থ আপনি অন্যান্য বিবৃতিতে যেমন আপনার ফিরিয়ে নেওয়া মানটি ব্যবহার করতে পারেন, যেমন

    select * 
    from table 
    where col_a < (select col_A from f())
  2. একটি মান ফেরত দিন: এসপি স্বয়ংক্রিয়ভাবে কোনও মান ফেরত দেয় না যতক্ষণ না আপনি সংশোধনকারী রিটার্নের ধরণ উল্লেখ করেন , খোলেন এবং একটি কার্সার ফিরে না; f শেষ বিবৃতিতে ফলাফলটি প্রত্যাবর্তন করে যেখানে একটি 'রিটার্ন' ধারাটি একটি নির্বাচিত ধারাটির মতো এম্বেড করা হয় ।

  3. একক / একাধিক ফলাফল সেটগুলি রিটার্ন করুন: এখানে ফলাফল সেটগুলি ফলাফলগুলির একটি তালিকা উল্লেখ করে যা ফরম্যাটে আলাদা হতে পারে, যেমন একক পূর্ণসংখ্যা, পাঠ্য অ্যারে এবং দুটি টেবিলের সেট। এসপি যতক্ষণ না আপনি রিফিকার্সার রিটার্ন টাইপ নির্দিষ্ট করেন, খুলুন এবং কার্সারটি ফিরিয়ে দেন ততক্ষণ একাধিক সেট ফেরত দিতে পারে। তবে, চ কেবলমাত্র এক ধরণের সেট ফেরত দিতে পারে।

সাধারণত, সঞ্চিত পদ্ধতিগুলি ডেটাবেস ডেটা বা কাঠামো সংশোধন করতে ব্যবহৃত হয় যেখানে মুছুন, আপডেট করুন, ড্রপ করুন ইত্যাদি; বা এমন পরিস্থিতিতে যেখানে একাধিক ফলাফল সেট প্রয়োজন। অন্যদিকে ফাংশনটি বেশিরভাগ ক্ষেত্রে সাদামাটা প্রশ্নের জন্য বেছে নেওয়া হয়।

আমার ব্যাখ্যা সম্পর্কিত আরও তথ্যের জন্য, দয়া করে এই লিঙ্কটি দেখুন: পোস্টগ্রেএসকিউএল মধ্যে সঞ্চিত পদ্ধতি এবং কার্যাদি

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.