মূল কন্টেন্টে যান
মডিউল 12 · 1-এর পাঠ 4কোর্সে 45/57~15 min
মডিউল পাঠ (1/4)

UDF এবং বেস SQL

এখন পর্যন্ত আমরা Node.js সার্ভার থেকে প্রশ্ন পাঠাচ্ছি। কিন্তু যদি একটি সূত্র কয়েক ডজন বিভিন্ন প্রশ্নের (যেমন ভ্যাট সহ চূড়ান্ত মূল্য গণনা) ব্যবহার করা হয়, তাহলে জাভাস্ক্রিপ্টে গণিতের নকল কেন? SQL ফাংশন (ইউজার ডিফাইনড ফাংশন - UDF) চলুন DB এর ভিতরেই "ম্যাক্রো" তৈরি করি।

এখানে কিভাবে একটি গাণিতিক SQL ম্যাক্রো তৈরি করা যায়:

SQL
CREATE OR REPLACE FUNCTION calculate_tax(price NUMERIC)
RETURNS NUMERIC AS $$
  SELECT price * 1.22;
$$ LANGUAGE sql;

একবার এই কমান্ডটি চলে গেলে, ফাংশনটি আমাদের ডাটাবেসে চিরকাল বেঁচে থাকে। এটি যে কোনও প্রশ্ন থেকে কল করা যেতে পারে:

SQL
SELECT name, calculate_tax(unit_price) AS price_with_tax FROM products;

গতিশীল সৃষ্টি

আমরা যতগুলি চাই ততগুলি ভেরিয়েবল সংজ্ঞায়িত করতে পারি, তাদের প্রকারগুলি নির্দিষ্ট করে, এবং LANGUAGE sql ক্যোয়ারী চালাবে এবং $$ ডলার চিহ্নগুলির মধ্যে রাখা শেষ বিবৃতিটি স্পষ্টভাবে ফিরিয়ে দেবে৷

নিজে চেষ্টা করে দেখুন

ব্যায়াম#sql.m12.l1.e1
প্রচেষ্টা: 0লোড হচ্ছে...

'get_full_name' নামে একটি সাধারণ কলযোগ্য ফাংশন তৈরি করুন যা দুটি টেক্সট প্যারামিটার ('first_name' TEXT, 'last_name' TEXT) গ্রহণ করে।\nএটি অবশ্যই একটি TEXT মান প্রদান করবে।\nভিতরে, একটি তুচ্ছ নির্বাচন করুন যা দুটি আর্গুমেন্টকে তাদের মধ্যে একটি স্থান দিয়ে সংযুক্ত করে এবং এটিকে ভাষা sql হিসাবে ঘোষণা করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

ফাংশন তৈরি করুন বা প্রতিস্থাপন করুন get_full_name(first_name TEXT, last_name TEXT) $$ প্রথম_নাম নির্বাচন করুন হিসাবে টেক্সট ফেরত দেয় || '' || শেষ_নাম; $$ LANGUAGE sql;

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম#sql.m12.l1.e2
প্রচেষ্টা: 0লোড হচ্ছে...

আরও উন্নত UDF-এ আমরা সম্পূর্ণ প্রশ্নগুলি এম্বেড করতে পারি। একটি ফাংশন 'get_customer_count()' তৈরি করুন যা কোনো প্যারামিটার গ্রহণ করে না এবং একটি পূর্ণসংখ্যা ফেরত দেয়।\nভিতরে, একটি তুচ্ছ 'সিলেক্ট COUNT(আইডি) গ্রাহকদের থেকে' চালান।\nএটিকে বিশুদ্ধ sql ভাষা হিসাবে ঘোষণা করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

সতর্ক থাকুন: COUNT একটি বিগইন্ট প্রদান করে, রিটার্ন টাইপের সাথে মেলে এটিকে INTEGEER-এ কাস্ট করুন! ফাংশন তৈরি করুন বা প্রতিস্থাপন করুন get_customer_count() গ্রাহকদের থেকে $$ সিলেক্ট কাস্ট (কাউন্ট(আইডি) পূর্ণসংখ্যা হিসাবে) হিসাবে পূর্ণসংখ্যা ফেরত দেয়; $$ LANGUAGE sql;

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ