مرکزی مواد پر جائیں
ماڈیول 12 · سبق 1 از 4کورس میں 45/57~15 min
ماڈیول اسباق (1/4)

UDFs اور بیس SQL

اب تک ہم Node.js سرور سے سوالات بھیج رہے ہیں۔ لیکن اگر درجنوں مختلف سوالات میں ایک فارمولہ استعمال کیا جاتا ہے (مثلاً VAT سمیت حتمی قیمت کا حساب لگانا)، تو جاوا اسکرپٹ میں ریاضی کو کیوں نقل کیا جائے؟ SQL فنکشنز (یوزر ڈیفائنڈ فنکشنز - UDF) آئیے ڈی بی کے اندر ہی "میکروز" بنائیں۔

یہاں ایک ریاضیاتی ایس کیو ایل میکرو بنانے کا طریقہ ہے:

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' کے نام سے ایک سادہ کال ایبل فنکشن بنائیں جو دو TEXT پیرامیٹرز کو قبول کرے ('first_name' TEXT, 'last_name' TEXT)۔\nاسے ایک TEXT قدر واپس کرنی ہوگی۔\nاندر، ایک چھوٹی سی SELECT کریں جو ان کے درمیان ایک جگہ کے ساتھ دو دلائل کو جوڑ دے، اور اسے زبان کے sql کے طور پر اعلان کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

فنکشن بنائیں یا بدلیں get_full_name(first_name TEXT, last_name TEXT) ٹیکسٹ کو $$ منتخب کریں پہلا نام || '' || آخری_نام؛ $$ LANGUAGE sql;

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش#sql.m12.l1.e2
کوششیں: 0لوڈ ہو رہا ہے…

مزید جدید UDFs میں ہم پورے استفسارات کو سرایت کر سکتے ہیں۔ ایک فنکشن 'get_customer_count()' بنائیں جو کوئی پیرامیٹرز قبول نہ کرے اور ایک INTEGER واپس کرے۔\nاندر، ایک معمولی 'SELECT COUNT(id) FROM گاہک' چلائیں۔\nاسے خالص sql زبان کے طور پر اعلان کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

دھیان سے: COUNT ایک بڑا حصہ لوٹاتا ہے، واپسی کی قسم سے مماثل ہونے کے لیے اسے INTEger میں کاسٹ کریں! فنکشن بنائیں یا تبدیل کریں get_customer_count() گاہکوں سے $$ منتخب کریں CAST(COUNT(id) بطور مکمل) $$ LANGUAGE sql;

3 کوششوں کے بعد حل دستیاب ہے۔