PDA

View Full Version : تبدیل دستور cursor از oracle به sql server



azygole
شنبه 03 دی 1384, 21:48 عصر
سلام . خسته نباشید . یک سئوال دارم . من با oracle و delphi کار می کنم و یک procedure به صورت زیر نوشته ام .

CREATE function paygir ( insectionnum varchar2 , insection varchar2 , incommandscode varchar2 , insectioncode varchar2 ) return varchar2 is
Cursor My_Cursor is
select title from paygiri , personel
where
sectionnum = insectionnum
and sectioncode = insectioncode
and section = insection
and commandscode = incommandscode
and commandsbandcode = '0'
and paygiri.personelcode = personel.code;
xx varchar2(500);
Buf Varchar2(500);
begin
Open My_Cursor;
Loop
Fetch My_Cursor Into Buf;
Exit when My_Cursor%NotFound;
xx:=xx||' , '||Buf;
End Loop;
Close My_Cursor;
xx:=SubStr(xx,3,Length(xx));
return xx;
end;
حالا می خواهم آن را تبدیل به sql server کنم و این پروسیجر را نوشتم :

CREATE function paygir (
@insectionnum varchar(50) ,
@insection varchar(50) ,
@incommandscode varchar(50) ,
@insectioncode varchar(50) )
returns varchar(50) as
begin
declare @xx varchar(500) , @buf varchar(500)
declare my_cursor cursor for
select title from paygiri , personel
where
sectionnum = @insectionnum
and sectioncode = @insectioncode
and section = @insection
and commandscode = @incommandscode
and commandsbandcode = '0'
and paygiri.personelcode = personel.code
open my_cursor
fetch next from my_cursor into @buf
while @@fetch_status = '0'
begin
select @xx=@xx+' , '+@buf
end
close my_cursor
deallocate my_cursor
return @xx
end
اما وقتی با یک دستور select صداش می زنم توی loop می افته و قفل می کنه . می تونید راهنماییم کنید . ممنون می شم . :لبخندساده

AminSobati
شنبه 03 دی 1384, 23:29 عصر
دوست عزیزم،
شما داخل While باید Fetch انجام بدین تا Fetch_Status@@ بالاخره غیر از صفر بشه. مثلا چیزی شبیه به این:


CREATE function paygir (
@insectionnum varchar(50) ,
@insection varchar(50) ,
@incommandscode varchar(50) ,
@insectioncode varchar(50) )
returns varchar(50) as
begin
declare @xx varchar(500) , @buf varchar(500)
declare my_cursor cursor for
select title from paygiri , personel
where
sectionnum = @insectionnum
and sectioncode = @insectioncode
and section = @insection
and commandscode = @incommandscode
and commandsbandcode = '0'
and paygiri.personelcode = personel.code
open my_cursor
fetch next from my_cursor into @buf
while @@fetch_status = '0'
begin
select @xx=@xx+' , '+@buf
fetch next from my_cursor into @buf
end
close my_cursor
deallocate my_cursor
return @xx
end