آژانس هواپیمایی
pop up

stored rotines

شروع موضوع توسط sasan_66 ‏5 اکتبر 2007 در انجمن PHP

  1. sasan_66

    sasan_66 کاربر تازه وارد

    تاریخ عضویت:
    ‏18 جولای 2006
    نوشته ها:
    450
    تشکر شده:
    0
    ميشه يه پروسيجر تعريف كرد كه پارامتر ورودي داشته باشه و از اين پارامتر براي نام جدول استفاده كرد؟
    مثلا قراره پروسيجر يه statement مربوط به ايجاد جدول روا جرا كنه كه نام جدول از پارامتر معلوم شه؟
    کد:
    create procedure test ( in tname varchar(10))
    begin
    create table tname ( id int );
    end
     
  2. hba

    hba کاربر فعال صفحات داینامیک کاربر فعال

    تاریخ عضویت:
    ‏8 آگوست 2004
    نوشته ها:
    1,511
    تشکر شده:
    1
    محل سکونت:
    تهران-ونک-php-mysql
    دقیق یادم نیست
    ولی یادمه یه زمانی داشتم با اراکل این مدل کاری می کردم
    روی پروسیجر و متغییر این Create table یه مشکلی داشت یادم نمی اد
    تست کن
     
  3. sasan_66

    sasan_66 کاربر تازه وارد

    تاریخ عضویت:
    ‏18 جولای 2006
    نوشته ها:
    450
    تشکر شده:
    0
    مشكل كه داره مثلا رو كد بالا ميام اون پراسيجر رو صدا مي زنم
    کد:
    call test( 'sasan' );
    خوب با اين فراخواني مي خوام جدولي به اسم sasan ايجاد شه ولي مياد جدولي به اسم tname ميسازه
    انگاري به tname اون تو به چشم يه مقدار ثابت نگاه مي كنه نه يه متغير كه بره محتواي متغيرو بررسي كنه
    يه جاي كارم اشتباهه كه نمي فهم كجاست!
    يا اين هيچي نوفهمه :D يا من :(
     
  4. hba

    hba کاربر فعال صفحات داینامیک کاربر فعال

    تاریخ عضویت:
    ‏8 آگوست 2004
    نوشته ها:
    1,511
    تشکر شده:
    1
    محل سکونت:
    تهران-ونک-php-mysql
    چند مثال تست شده می زنم
    PHP:
    mysqlCREATE PROCEDURE sp_case(IN var1 INT
    BEGIN 
     
    CASE var1 
      WHEN 1 THEN SELECT 
    'One'
      
    WHEN 2 THEN SELECT 'Two'
      ELSE 
    SELECT 'Something else'
     
    END CASE; 
    END|
    Query OK0 rows affected (0.00 sec)
    mysqlCALL sp_case(1)
    یا
    PHP:
    mysqlCREATE PROCEDURE sp_condition(IN var1 INT
    BEGIN 
     
    IF (var1 10)  
      
    THEN SELECT 'greater'
      ELSE 
    SELECT 'less than or equal'
     
    END IF; 
    END|
    Query OK0 rows affected (0.06 sec)
    mysqlCALL sp_condition(5)
    PHP:
    CREATE PROCEDURE sp_varInsert(
     @
    variable varchar(30), 
     @
    value varchar(255)) As
       IF 
    EXISTS(SELECT FROM tbVariables WHERE variable = @variable)
           
    DELETE FROM tbVariables WHERE variable = @variable
       
       INSERT tbVariables VALUES
    (@variable, @value)
    GO
     
  5. sasan_66

    sasan_66 کاربر تازه وارد

    تاریخ عضویت:
    ‏18 جولای 2006
    نوشته ها:
    450
    تشکر شده:
    0
    حامد جان ممنون ولي من با ايجاد پراسيجر مشكل ندارم مشكل من با كديه كه تو پست اولي زدم يعني ايجاد جدولي كه اسمش توسط پارامتر ارسالي به پراسيجر تعين شه
     
  6. hba

    hba کاربر فعال صفحات داینامیک کاربر فعال

    تاریخ عضویت:
    ‏8 آگوست 2004
    نوشته ها:
    1,511
    تشکر شده:
    1
    محل سکونت:
    تهران-ونک-php-mysql
    اینو تست کن
    PHP:
    create procedure test ( @tname varchar(10))
    begin
    create table 
    @tname id int );
    end

    فعلا دسترسی به وب سرور و mysql ندارم اینجا
     
  7. boxilink
  8. sasan_66

    sasan_66 کاربر تازه وارد

    تاریخ عضویت:
    ‏18 جولای 2006
    نوشته ها:
    450
    تشکر شده:
    0
    ارور ميده
    دليل استفاده از @ رو كنار پارامتر tname رو نمي فهمم. فكر كنم ارورم به خاطره اين ميده
    منظورت متغير session هستش؟
     
  9. hba

    hba کاربر فعال صفحات داینامیک کاربر فعال

    تاریخ عضویت:
    ‏8 آگوست 2004
    نوشته ها:
    1,511
    تشکر شده:
    1
    محل سکونت:
    تهران-ونک-php-mysql
    نمیدونم این نوع رو تو سایت mysql هم دیدم ولی نمدونم چرا اررور میده
     
  10. peymanafraz

    peymanafraz کاربر تازه وارد

    تاریخ عضویت:
    ‏28 دسامبر 2005
    نوشته ها:
    135
    تشکر شده:
    0
    محل سکونت:
    $strHome
    از @ برای مشخص کردن متغیرها استفاده میشه مثلا شما میتونی سه سلکت رو بریزی داخل یه متغیر و بعدا ازش استفاده کنی. مثلا :

    کد:
    SELECT strName INTO @name FROM names WHERE intID=1;
    SELECT * FROM info WHERE [email protected];
    
    البته این یه مثال بود و میدونم که همین کارو با جوین هم میشه انجام داد ولی برای توضیح استفاده کردم.
     
  11. sasan_66

    sasan_66 کاربر تازه وارد

    تاریخ عضویت:
    ‏18 جولای 2006
    نوشته ها:
    450
    تشکر شده:
    0
    خوب اينو مي دونم كه از @ ميشه براي مشخص كردن متغير استفاده كرد كه به اين جور متغير ها ميگن variable
    session
    به كد زير دقت كنيد
    کد:
    set @testVar = 2;
    delimiter //
    create procedure test()
    begin
    select @testVar;
    end//
    خوب يه جورايي ميشه گفت كه از testVar براي سشن جاري mysql ميشه همه جا ازش استفاده كرد.
    ولي توي آخرين مثالي حامد زدند هنگام تعريف متغير پارامتر از @ استفاده كردند خوب اين چه مفهومي داره كه باعث ارورم ميشه؟
    اگه منظور همين متغير session هستش كه لزومي نداره توي پارامتر تعريف شه يا نه منظور يه جورايي تعريف پارامتر از نوع out هستش؟؟
     
  12. peymanafraz

    peymanafraz کاربر تازه وارد

    تاریخ عضویت:
    ‏28 دسامبر 2005
    نوشته ها:
    135
    تشکر شده:
    0
    محل سکونت:
    $strHome
    دوست عزیز من فهمیدم شما چی میگی. احتمالا کدی که حامدخان گذاشتن هم بخاطر این بوده که بالاخره اون متغیر tname باید یه جایی تعریف و مقدارش دریافت بشه ولی خوب فکر نمیکنم این راهش باشه.
    بهرحال من هر راهی که میشد رو لمتحان کردم ولی به نتیجه ای نرسیدم. احتمالا نمیشه همچین کاری کرد.