У чому різниця між збереженими процедурами, функціями та процедурами?


75

У чому полягає різниця між цими 3 термінами в контексті бази даних MySQL:

  • збережена процедура
  • збережена функція
  • зберігається рутина

Також вбудовані функції, такі як ті функції часу та часу (наприклад, WEEKDAY()тощо), розглядаються як що?


3
відповідна відповідь: MySQL зберігає процедуру проти функції , я знайшов посилання, поки вдосконалював свою відповідь, отже, зв’язаний :)
Grijesh Chauhan

Як збережені процедури, так і функції є об'єктами бази даних, що містить набір операторів. Збережені процедури попередньо скомпільовані, з іншого боку функції компілюються щоразу при виклику. Функція повинна мати повернене значення, але для процедур вона є необов’язковою. У збережених процедурах ви можете використовувати INSERT, UPDATE, DELETE, але у функції ви можете використовувати лише оператор SELECT.
Miroslav Savel,

Відповіді:


89

Google - ваш друг. Перший збіг для "процедури процедури рутинної функції mysql" такий: http://dev.mysql.com/doc/refman/5.0/en/stored-routines-syntax.html

Короткий підсумок:

Зберігається процедура - це або процедура, або функція.

Процедура викликається за допомогою оператора CALL і може передавати лише значення, використовуючи вихідні змінні.

Функцію можна викликати всередині оператора, як і будь-яку іншу функцію, і може повернути скалярне значення.


23
Поки я погоджуюся з настроями RTFM. Ця відповідь тепер використовується Google для показу вбудованого результату.
Реалістично

51

Тут я спробував узагальнити відмінності між функціями та процедурами:

  1. FUNCTION завжди повертає значення, використовуючи оператор return. ПРОЦЕДУРА може повертати одне або кілька значень через параметри або взагалі не повертати жодного.
  2. Функції зазвичай використовуються для обчислень, де як процедури зазвичай використовуються для виконання бізнес-логіки.
  3. Функція повертає лише 1 значення. Процедура може повертати кілька значень (макс. 1024).
  4. Збережена процедура завжди повертає ціле значення нуля за замовчуванням. Тоді як типи повернення функції можуть бути скалярними або табличними або табличними значеннями.
  5. Збережені процедури мають заздалегідь складений план виконання, де функції не є.
  6. Функцію можна викликати безпосередньо за допомогою оператора SQL, як SELECT func_name FROM DUALтоді, коли процедури не можуть.
  7. Збережена процедура має захист і зменшує мережевий трафік, а також ми можемо викликати збережену процедуру в будь-якій кількості програм одночасно.
  8. Функція може бути використана в запитах SQL, тоді як процедура не може використовуватися в запитах SQL. Це спричиняє велику різницю між функцією та процедурами.

30

Різниця між функцією MySQL та процедурою mysql

Функція MYSQL

Він повинен повертати значення. IN, OUTі INOUTне може використовуватися у функції. Але повернутий тип даних повинен бути оголошений при створенні функції. функцію можна викликати з оператора SQL. Функція повертає одне значення.

Процедура MYSQL

Повернені значення не є обов'язковими, але можуть використовувати параметр OUT для повернення процедури. Можна використовувати IN| OUT| INOUTпараметри. Процедуру не можна викликати з оператора SQL. процедура повертає кілька значень за допомогою OUTабо INOUTпараметрів.


5

ПРОЦЕДУРИ ПРОТИ ФУНКЦІЙ

1.  PROCEDURES may or may not return a value but FUNCTION must return a value
2.  PROCEDURES can have input/output parameter but FUNCTION only has input parameter.
3.  We can call FUNCTION from PROCEDURES but cannot call PROCEDURES from a function. 
4.  We cannot use PROCEDURES in SQL statement like SELECT, INSERT, UPDATE, DELETE, MERGE etc. but we can use them with FUNCTION.
5.  We can use try-catch exception handling in PROCEDURES but we cannot do that in FUNCTION. 
6.  We can use transaction in PROCEDURES but it is not possible in FUNCTION.

2

Функція повинна повертати значення, але в збереженій процедурі це необов’язково (процедура може повертати нуль або n значень). Функції можуть мати лише вхідні параметри, тоді як процедури можуть мати вхідні / вихідні параметри. Функції можна викликати з процедури, тоді як процедури не можна викликати з функції.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.