برگزیده های پرشین تولز

stored rotines

sasan_66

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

hba

کاربر فعال صفحات داینامیک
کاربر فعال
تاریخ عضویت
8 آگوست 2004
نوشته‌ها
1,511
لایک‌ها
1
سن
39
محل سکونت
تهران-ونک-php-mysql
دقیق یادم نیست
ولی یادمه یه زمانی داشتم با اراکل این مدل کاری می کردم
روی پروسیجر و متغییر این Create table یه مشکلی داشت یادم نمی اد
تست کن
 

sasan_66

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

hba

کاربر فعال صفحات داینامیک
کاربر فعال
تاریخ عضویت
8 آگوست 2004
نوشته‌ها
1,511
لایک‌ها
1
سن
39
محل سکونت
تهران-ونک-php-mysql
چند مثال تست شده می زنم
PHP:
mysql> CREATE 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 OK, 0 rows affected (0.00 sec)
mysql> CALL sp_case(1)

یا
PHP:
mysql> CREATE PROCEDURE sp_condition(IN var1 INT) 
BEGIN 
 IF (var1 > 10)  
  THEN SELECT 'greater'; 
  ELSE SELECT 'less than or equal'; 
 END IF; 
END|
Query OK, 0 rows affected (0.06 sec)
mysql> CALL 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
 

sasan_66

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

hba

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

sasan_66

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

hba

کاربر فعال صفحات داینامیک
کاربر فعال
تاریخ عضویت
8 آگوست 2004
نوشته‌ها
1,511
لایک‌ها
1
سن
39
محل سکونت
تهران-ونک-php-mysql
نمیدونم این نوع رو تو سایت mysql هم دیدم ولی نمدونم چرا اررور میده
 

peymanafraz

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

کد:
SELECT strName INTO @name FROM names WHERE intID=1;
SELECT * FROM info WHERE strName=@name;

البته این یه مثال بود و میدونم که همین کارو با جوین هم میشه انجام داد ولی برای توضیح استفاده کردم.
 

sasan_66

کاربر تازه وارد
تاریخ عضویت
18 جولای 2006
نوشته‌ها
450
لایک‌ها
0
از @ برای مشخص کردن متغیرها استفاده میشه مثلا شما میتونی سه سلکت رو بریزی داخل یه متغیر و بعدا ازش استفاده کنی. مثلا :

کد:
SELECT strName INTO @name FROM names WHERE intID=1;
SELECT * FROM info WHERE strName=@name;

البته این یه مثال بود و میدونم که همین کارو با جوین هم میشه انجام داد ولی برای توضیح استفاده کردم.

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

peymanafraz

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

دوست عزیز من فهمیدم شما چی میگی. احتمالا کدی که حامدخان گذاشتن هم بخاطر این بوده که بالاخره اون متغیر tname باید یه جایی تعریف و مقدارش دریافت بشه ولی خوب فکر نمیکنم این راهش باشه.
بهرحال من هر راهی که میشد رو لمتحان کردم ولی به نتیجه ای نرسیدم. احتمالا نمیشه همچین کاری کرد.
 
بالا