• 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
Stored Procedure
#1
سلام به همه Big Grin

من توی نت و سایت های برنامه نویسی خیلی دنبال این گشتم که Stored Procedure چیه و در MySql چطوری میشه نوشتش؟؟؟؟؟؟ اما به هیچ جواب قانع کنند ه ای نرسیدم Dodgy خواستم ببینم اینجا کسی می تونه راهنمایی کنه ؟؟؟
OpEN SoUrCe OpeN MiND oPen LiFE!
  پاسخ
تشکر شده توسط : farhad.programmer
#2
اینجا که کامل در موردش نوشته
http://dev.mysql.com/doc/refman/5.1/en/s...tines.html
  پاسخ
تشکر شده توسط : mahyar1365 farhad.programmer molana
#3
من تشکر می کنم خیلی خوب بود اما حتی المکان می خواستم یه منبع فارسی پیدا کنم که برای همه قابل فهم و درک باشه درضمن حداقل یه مثال ساده هم در این مورد ذکر بشه

باز هم تشکر میکنم
خودم یک سری اطلاعات پیدا کردم امیدوارم مفید باشه :

برخی از قابلیت های رویه های ذخیره شده یا Stored Procedure عبارت است از :



1. Precompiled بودن آنها به این معنی که به زبان ماشین بسیار نزدیک شده و به طور کامل از اول ترجمه نمیشود ، این امر باعث افزایش سرعت بارگزاری می گردد .
2. قابلیت ذخیره داشته و میتوان از یک رویه چندین بار در کد نویسی استفاده کرد .
3. دارای ویرایشگر Query می باشد (میتوانید به سادگی یک Query حرفه ای ایجاد کنید)
4. دارای Syntax Parser هست و از خطاهای SQL جلوگیری می کند .
5. دارای امنیت بالایی است و از هک شدن سایت شما توسط SQL Injection در بسیاری موارد جلوگیری می کند .
6. قابلیت درج چندین دستور SQL را پشت سرهم داراست .
7. قابلیت ارسال ورودی و خروجی دارد .
8. قابلیت برنامه نویسی ( شرط ، حلقه و...) به زبان TransactSQL دارد .

و.....


برگرفته از سایت:HOW 2 LEARN ASP.NET
OpEN SoUrCe OpeN MiND oPen LiFE!
  پاسخ
تشکر شده توسط : farhad.programmer khezri
#4
سلام
ميشه بگين اين دستورات را در كجا بايد بنويسيم؟؟
در phpmyadmin???
يا در جاي ديگر؟
  پاسخ
تشکر شده توسط :
#5
سلام
خب اولین باره همچین چیزی می شنوم حداقل یه منبع آموزش معرفی کنید....
با تشکر ممل آمریکایی
  پاسخ
تشکر شده توسط :
#6
Stored Procedure فقط تو اسکیو ال سرور ماکروسافت هست(اوراکل رو نمی دونم.) اما معادلش در مای اسکیوال توابع هستند.

برای مثال من قبلا دستورات تاریخ شمسی رو به صورت توابع دراوردم.
کد پی‌اچ‌پی:
-- ----------------------------
-- Function 
structure for `__mydiv`
-- ----------------------------
DROP FUNCTION IF EXISTS `__mydiv`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` FUNCTION `__mydiv`(`aint,`bintRETURNS int(11)
BEGIN

# Copyright (C) 2009  Mohammad Saleh Souzanchi
# WebLog : www.saleh.soozanchi.ir
# Version V1.0
 
return FLOORb);
END;;
DELIMITER ;

-- ----------------------------
-- Function 
structure for `_gdmarray`
-- ----------------------------
DROP FUNCTION IF EXISTS `_gdmarray`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` FUNCTION `_gdmarray`(`msmallintRETURNS smallint(2)
BEGIN
# Copyright (C) 2009  Mohammad Saleh Souzanchi
# WebLog : www.saleh.soozanchi.ir
# Version V1.0

    
CASE m
        WHEN 0 THEN 
RETURN 31;
        
WHEN 1 THEN RETURN 28;
        
WHEN 2 THEN RETURN 31;
        
WHEN 3 THEN RETURN 30;
        
WHEN 4 THEN RETURN 31;
        
WHEN 5 THEN RETURN 30;
        
WHEN 6 THEN RETURN 31;
        
WHEN 7 THEN RETURN 31;
        
WHEN 8 THEN RETURN 30;
        
WHEN 9 THEN RETURN 31;
        
WHEN 10 THEN RETURN 30;
        
WHEN 11 THEN RETURN 31;
    
END CASE;
   

END;;
DELIMITER ;

-- ----------------------------
-- Function 
structure for `_jdmarray`
-- ----------------------------
DROP FUNCTION IF EXISTS `_jdmarray`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` FUNCTION `_jdmarray`(`msmallintRETURNS smallint(2)
BEGIN
# Copyright (C) 2009  Mohammad Saleh Souzanchi
# WebLog : www.saleh.soozanchi.ir
# Version V1.0

    
CASE m
        WHEN 0 THEN 
RETURN 31;
        
WHEN 1 THEN RETURN 31;
        
WHEN 2 THEN RETURN 31;
        
WHEN 3 THEN RETURN 31;
        
WHEN 4 THEN RETURN 31;
        
WHEN 5 THEN RETURN 31;
        
WHEN 6 THEN RETURN 30;
        
WHEN 7 THEN RETURN 30;
        
WHEN 8 THEN RETURN 30;
        
WHEN 9 THEN RETURN 30;
        
WHEN 10 THEN RETURN 30;
        
WHEN 11 THEN RETURN 29;
    
END CASE;
   

END;;
DELIMITER ;

-- ----------------------------
-- Function 
structure for `pdate`
-- ----------------------------
DROP FUNCTION IF EXISTS `pdate`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` FUNCTION `pdate`(`gdatedatetimeRETURNS char(100CHARSET utf8
BEGIN
# Copyright (C) 2009  Mohammad Saleh Souzanchi
# WebLog : www.saleh.soozanchi.ir
# Version V1.0

    
DECLARE 
        
i,
        
gygmgd,
        
g_day_no,j_day_noj_np,
        
jy,jm,jd INT DEFAULT 0;
    DECLARE 
resout char(100);
    DECLARE 
ttime CHAR(20);

    
SET gy YEAR(gdate)-1600;
    
SET gm MONTH(gdate)-1;
    
SET gd DAY(gdate)-1;
    
SET ttime TIME(gdate);
    
SET g_day_no = ((365 *  gy) + __mydivgy+3) - __mydivgy+99 100 )+ __mydiv gy+399400 ) );
        
SET i 0;

    WHILE (
gm) do
        
SET  g_day_no g_day_no _gdmarray(i);
        
SET i i+1
    
end WHILE;

    if  
gm and (( gyand gy%100 <> )) or gy 400 0 THEN 
        SET     g_day_no 
=    g_day_no +1;
    
end IF;
    
    
SET g_day_no g_day_no gd

    
SET j_day_no g_day_no -79;
    
SET j_np =  j_day_no DIV 12053;
    
set j_day_no j_day_no 12053;
    
SET jy 979 33 j_np __mydiv(j_day_no,1461);
    
SET j_day_no j_day_no 1461;

    if 
j_day_no >= 366 then 
        SET jy 
jy __mydiv(j_day_no-1365);
        
SET j_day_no =( j_day_no-1) % 365;
    
end if;

    
SET i 0;

    WHILE ( 
11 and j_day_no >= _jdmarray(i) ) do
        
SET  j_day_no j_day_no -  _jdmarray(i);
        
SET i i+1;
    
end WHILE;

    
SET jm i+1;
    
SET jd j_day_no+1;
         
SET resout CONCAT_WS ('-',jy,jm,jd);

    if (
ttime <> '00:00:00' then
        SET resout 
CONCAT_WS(' ',resout,ttime);
    
END IF;
    
    RETURN      
resout;
END;;
DELIMITER ;

-- ----------------------------
-- Function 
structure for `PMONTH`
-- ----------------------------
DROP FUNCTION IF EXISTS `PMONTH`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` FUNCTION `PMONTH`(`gdatedatetimeRETURNS char(100CHARSET utf8
BEGIN
# Copyright (C) 2009  Mohammad Saleh Souzanchi
# WebLog : www.saleh.soozanchi.ir
# Version V1.0

    
DECLARE 
        
i,
        
gygmgd,
        
g_day_no,j_day_noj_np,
        
jy,jm,jd INT DEFAULT 0;
    DECLARE 
resout char(100);
    DECLARE 
ttime CHAR(20);

    
SET gy YEAR(gdate)-1600;
    
SET gm MONTH(gdate)-1;
    
SET gd DAY(gdate)-1;
    
SET ttime TIME(gdate);
    
SET g_day_no = ((365 *  gy) + __mydivgy+3) - __mydivgy+99 100 )+ __mydiv gy+399400 ) );
        
SET i 0;

    WHILE (
gm) do
        
SET  g_day_no g_day_no _gdmarray(i);
        
SET i i+1
    
end WHILE;

    if  
gm and (( gyand gy%100 <> )) or gy 400 0 THEN 
        SET     g_day_no 
=    g_day_no +1;
    
end IF;
    
    
SET g_day_no g_day_no gd

    
SET j_day_no g_day_no -79;
    
SET j_np =  j_day_no DIV 12053;
    
set j_day_no j_day_no 12053;
    
SET jy 979 33 j_np __mydiv(j_day_no,1461);
    
SET j_day_no j_day_no 1461;

    if 
j_day_no >= 366 then 
        SET jy 
jy __mydiv(j_day_no-1365);
        
SET j_day_no =( j_day_no-1) % 365;
    
end if;

    
SET i 0;

    WHILE ( 
11 and j_day_no >= _jdmarray(i) ) do
        
SET  j_day_no j_day_no -  _jdmarray(i);
        
SET i i+1;
    
end WHILE;

    
SET jm i+1;
    
SET jd j_day_no+1;
    RETURN      
jm;
END;;
DELIMITER ;

-- ----------------------------
-- Function 
structure for `pmonthname`
-- ----------------------------
DROP FUNCTION IF EXISTS `pmonthname`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` FUNCTION `pmonthname`(`gdatedatetimeRETURNS varchar(100CHARSET utf8
BEGIN
# Copyright (C) 2009  Mohammad Saleh Souzanchi
# WebLog : www.saleh.soozanchi.ir
# Version V1.0

CASE PMONTH(gdate
    
WHEN 1 THEN     RETURN 'فروردين';
    
WHEN 2 THEN RETURN 'ارديبهشت';
    
WHEN 3 THEN    RETURN 'خرداد';
    
WHEN 4 THEN    RETURN 'تير';
    
WHEN 5 THEN    RETURN 'مرداد';
    
WHEN 6 THEN     RETURN 'شهريور';
    
WHEN 7 THEN    RETURN 'مهر';
    
WHEN 8 THEN    RETURN 'آبان';
    
WHEN 9 THEN    RETURN 'آذر';
    
WHEN 10 THEN RETURN    'دي';
    
WHEN 12 THEN RETURN    'بهمن';
    
WHEN 12 THEN RETURN    'اسفند';
end CASE;


END;;
DELIMITER ;

-- ----------------------------
-- Function 
structure for `pyear`
-- ----------------------------
DROP FUNCTION IF EXISTS `pyear`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` FUNCTION `pyear`(`gdatedatetimeRETURNS char(100CHARSET utf8
BEGIN
# Copyright (C) 2009  Mohammad Saleh Souzanchi
# WebLog : www.saleh.soozanchi.ir
# Version V1.0

    
DECLARE 
        
i,
        
gygmgd,
        
g_day_no,j_day_noj_np,
        
jy,jm,jd INT DEFAULT 0;
    DECLARE 
resout char(100);
    DECLARE 
ttime CHAR(20);

    
SET gy YEAR(gdate)-1600;
    
SET gm MONTH(gdate)-1;
    
SET gd DAY(gdate)-1;
    
SET ttime TIME(gdate);
    
SET g_day_no = ((365 *  gy) + __mydivgy+3) - __mydivgy+99 100 )+ __mydiv gy+399400 ) );
        
SET i 0;

    WHILE (
gm) do
        
SET  g_day_no g_day_no _gdmarray(i);
        
SET i i+1
    
end WHILE;

    if  
gm and (( gyand gy%100 <> )) or gy 400 0 THEN 
        SET     g_day_no 
=    g_day_no +1;
    
end IF;
    
    
SET g_day_no g_day_no gd

    
SET j_day_no g_day_no -79;
    
SET j_np =  j_day_no DIV 12053;
    
set j_day_no j_day_no 12053;
    
SET jy 979 33 j_np __mydiv(j_day_no,1461);
    
SET j_day_no j_day_no 1461;

    if 
j_day_no >= 366 then 
        SET jy 
jy __mydiv(j_day_no-1365);
        
SET j_day_no =( j_day_no-1) % 365;
    
end if;

    
SET i 0;

    WHILE ( 
11 and j_day_no >= _jdmarray(i) ) do
        
SET  j_day_no j_day_no -  _jdmarray(i);
        
SET i i+1;
    
end WHILE;

    
SET jm i+1;
    
SET jd j_day_no+1;
    RETURN      
jy;
END;;
DELIMITER 

طریقه استفاده هم تو وبلاگم هست
  پاسخ
تشکر شده توسط :
#7
mysql هم Stored Procedure و هم توابع
که توابع یک خروجی میدهند ولی Stored Procedure نمی دهد ولی در پارامتر ها مه میگیریم
میتونیم از نوع ارجاعی out یا inout در نظر بگیریم
طبعاً اوراکل که قویترین پایگاه داده هست هم، این مورد را دارد
  پاسخ
تشکر شده توسط :
#8
(۱۳۸۹ دى ۱۴, ۰۱:۴۷ ق.ظ)bestirani2 نوشته: mysql هم Stored Procedure و هم توابع
که توابع یک خروجی میدهند ولی Stored Procedure نمی دهد ولی در پارامتر ها مه میگیریم
میتونیم از نوع ارجاعی out یا inout در نظر بگیریم
طبعاً اوراکل که قویترین پایگاه داده هست هم، این مورد را دارد

من تا الان چیزی به اسم Procedure که همون کار پروسیجر رو در مای اسکیوال سرور بکنه نه دیدم نه شنیدم. اگر شمت همون function رو منظورتونه که خوب بله کار Procedure رو با امکانات و .... بیشتر انجام میده. اما اگر منظورتون چیز دیگری هست. ممنون میشم در این ضمینه یک راهنمایی کنید. خیلی واسم جالب شد.
  پاسخ
تشکر شده توسط :
#9
(۱۳۸۹ دى ۱۴, ۰۳:۰۸ ق.ظ)zoghal نوشته:
(۱۳۸۹ دى ۱۴, ۰۱:۴۷ ق.ظ)bestirani2 نوشته: mysql هم Stored Procedure و هم توابع
که توابع یک خروجی میدهند ولی Stored Procedure نمی دهد ولی در پارامتر ها مه میگیریم
میتونیم از نوع ارجاعی out یا inout در نظر بگیریم
طبعاً اوراکل که قویترین پایگاه داده هست هم، این مورد را دارد

من تا الان چیزی به اسم Procedure که همون کار پروسیجر رو در مای اسکیوال سرور بکنه نه دیدم نه شنیدم. اگر شمت همون function رو منظورتونه که خوب بله کار Procedure رو با امکانات و .... بیشتر انجام میده. اما اگر منظورتون چیز دیگری هست. ممنون میشم در این ضمینه یک راهنمایی کنید. خیلی واسم جالب شد.
Procedure از مای اس کیو ال 5 به بعد اضافه شده یعنی توسط شرکت اوراکل
که سه نوع پارامتر میگیره in که وارد میشه out که فقط ارجایی هست (خارج میشه) و inout که هم وارد میشه و هم ارجاعی هست و در نهایت هیچ نوع خروجی نداره
ولی توی توابع تمام پارامتر های ما فقط وارد میشند و نمیشه نوعش رو انتخاب کرد ولی یک چیزی رو آخر سر به عنوان خروجی میدیم
http://dev.mysql.com/doc/refman/5.0/en/c...edure.html
  پاسخ
تشکر شده توسط : zoghal
#10
من يك ebook ازش پيدا كردم كه خيلي هم خوب و كامل بود
در آن نوشته بود كه براي تست رويه (پروسيجر) هاتون از نرم افزار query browser استفاده كنيد .
من هم از سايت mysql گرفتمش و خيلي راحت توانستم باهاش كار كنم و stored procedure بسازم
فقط هنوز موفق نشدم آن را در كدهاي php فراخواني كنم كه البته اين را هم در ebook نوشته بود ولي نشد
قبلا هميشه دات نتي ها مي گفتند mysql اين عيب بزرگ را داره كه نمي تواند با sp كار كند ولي الان ديگر اين مشكل رفع شده و خيلي هم كاربري است
اگر كسي اين ebook را مي خواهد اعلام كند تا برايش بفرستم
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان