من در شکل دور یک پارامتر رو خط کشیدم میخواستم بدونم مفهومش چیه
ممنونم
سلام،
p_film_count بعنوان خروجی تابع مشخص شده که قرار بوده تعداد فیلم هارا بعنوان خروجی برگرداند ولی استفاده نشده است.
برای اینکه بعنوان خروجی استفاده کنید میتونید به شکل زیر تابع رو تعریف کنید:
CREATE FUNCTION film_in_stock(p_film_id integer, p_store_id integer, OUT p_film_count integer) RETURNS integer AS $_$
BEGIN
SELECT COUNT(inventory_id) INTO p_film_count
FROM inventory
WHERE film_id = p_film_id
AND store_id = p_store_id
AND inventory_in_stock(inventory_id);
RETURN;
END;
$_$ LANGUAGE plpgsql;
مثالی از call کردن تابع:
SELECT * FROM film_in_stock([p_film_id], [p_store_id]);
کوئری بعدی ALTER ... مالکیت تابع film_in_stock را به نقش postgres میده.
محسن موحد۲۷ مرداد ۱۴۰۲، ۱۲:۴۶
ممنونم از پاسختون
سوالی که پیش میاد اینه که return آیا الزامی هست و تفاوتش با out چیه
وشکل زیر هم یک نمونه دیگه بود که حین درس من نوشتم که return نداره
Mahdi Nematshahi۲۷ مرداد ۱۴۰۲، ۲۰:۰۴
OUT: وقتی میخوایم یک تابع چیزی رو برگردونه، میتونیم از OUT استفاده کنیم. p_film_count مقداریست که میخواهیم بعد از اجرای تابع بعنوان خروجی برگرداند. اگر با زبانهای برنامه نویسی قبلاً آشنا شده باشی دقیقاً معنی تابع با آنها یکی است. یا در ریاضی که از توابع استفاده میشد، ورودی تابع X بود و خروجی اش Y. با مقدار OUT در تعریف تابع مشخص میکنیم که تابع خروجی دارد و خروجی اش در چه متغیری قرار میگیرد.
RETURN: این دستور به تابع میگه "مقداری که برات مشخص شده رو برگردون به جایی که تو رو فراخوانی کرده". داخل تابع اگر RETURN به تنهایی نوشته شده باشد، یعنی همون چیزی که از طریق OUT تعریف شده، برگردونده بشه. RETURN خالی بدون مقدار مشخص کننده ی اتمام تابع است و یکجاهایی مثل اینجا اگر نگذاریم هم فرقی ندارد ولی بعضی جاها نیازداریم در یک سری شرایط بگیم اگر فلان شرایط اتفاق افتاد همانجا ادامه تابع متوقف شود و از RETURN استفاده میکنیم اجرای تابع ادامه پیدا نکند.
اگر تابع RETURN نداشته باشد و بخواهید مقدار خاصی را برگردانید، با خطا مواجه میشوید. اما در مثال شما، چون از متغیر OUT استفاده شده، مقدار p_film_count به طور خودکار به عنوان مقدار بازگشتی در نظر گرفته میشود و نیازی به RETURN با مقدار خاص نیست.
در تابع شما، inventory_in_stock(inventory_id) تابع دیگری است که در شروط قرار گرفته است و با توضیحاتی که دادم این تابع اجرا خواهد شد و خروجی اش برمیگردد. خروجی این تابع true یا false خواهد بود. توضیحات این تابع در دقیقه 3:10 ویدیو بطور کامل آمده است.
بطور کلی، توابع در پایگاه دادهها معمولاً باید یک مقدار برگردانند، و RETURN نشان دهنده همان مقدار است. در مثال شما، متغیر OUT مقدار بازگشتی را تعیین میکند، بنابراین RETURN بدون مقدار خاص معتبر است.
تفاوت OUT و RETURN:
- OUT برچسبیه که به ما میگه این تابع چیزی رو برمیگردونه.
- RETURN وقتی استفاده میشه که بخوایم به تابع بگیم چه چیزی رو برگردونه. اما وقتی فقط OUT داریم، خود به خود میفهمه چی باید برگردونه، پس نیازی به تعیین مقدار برای RETURN نیست.
خلاصه اش اینه که با OUT مشخص میکنیم چی باید برگردونده بشه و با RETURN اجرای تابع رو تموم می کنیم.