View Full Version : تعریف متغیری در پروسیجر که شبیه دیتا ریدر باشه
rezaei manesh
یک شنبه 28 آبان 1385, 15:52 عصر
چه جوری در یک پروسیجر یک متغیری تعریف کنم که شبیه یک دیتا ریدر عمل کنه؟ که بتونم خروجی یک سلکت رو در اون بذارم و به تعداد خروجی ها در جدول insert کنم
اگه می شه یه تیکه کد معرفی کنید
AminSobati
یک شنبه 28 آبان 1385, 16:04 عصر
اگر منظورتون اینه که خروجی دستور Select وارد جدول دیگه ای بشه، میتونین از خود دستور Insert استفاده کنین:
INSERT MyTable SELECT * FROM MySecondTable
rezaei manesh
یک شنبه 28 آبان 1385, 16:13 عصر
آره دقیقا اما نه همه فیلد ها رو به همون شکل بلکه با کمی تغییر که در کل فقط یک جدول دیگره
برم امتهان کنم خیلی خیلی ممنونم
AminSobati
یک شنبه 28 آبان 1385, 22:33 عصر
این "کمی تغییر" که میفرمایید چجور تغییریه؟ میشه در یک Query حلش کرد؟
sarvestan
دوشنبه 29 آبان 1385, 08:40 صبح
بازهم توصیه ام استفاده از CURSOR ها است!
با یک CURSOR میتوان به یک مجموعه از رکورد ها اشاره کرد!
و در عین حال به هر رکورد در این مجموعه دسترسی داشت! این دسترسی می تواند بصورت فقط خواندنی باشد و یا دسترسی خواندن و نوشتن( اولی سریعتره)!
جستجو در سایت و کمی GOOGLING مشکل شما را در این رابطه حل میفرماید
rezaei manesh
دوشنبه 29 آبان 1385, 16:04 عصر
آقا جواب نگرفتم
من چطور می تونم همچین دستوری رو برای update بنویسم
insert INTO ShiftItemDef SELECT @TypeShiftId as TypeShiftId, DBDATE,... FROM ShiftItemDef
WHERE (TypeShiftId = @IdxTypeShiftId) AND (DBDATE BETWEEN @SDate AND @EDate)
این دستور الان رکود های مورد نظر رو به جدول اضافه می کنه درحالی که رکورد های برای این کد وجود دارد که باید این رکود ها درون اونها update بشن
در رابطه با cursor هم موافقم اما نتونستم چیز زیادی از اون در بیارم تو سایت که فقط پیشنهاد شده بود از این روش استفاده کنید اما این مثال رو تو گوگل پیدا کردم که زیاد ازش سر در نیاوردم
http://www.adp-gmbh.ch/ora/plsql/cursors/for_update.html
set feedback off
create table f (a number, b varchar2(10));
insert into f values (5,'five');
insert into f values (6,'six');
insert into f values (7,'seven');
insert into f values (8,'eight');
insert into f values (9,'nine');
commit;
create or replace procedure wco as
cursor c_f is
select a,b from f where length(b) = 5 for update;
v_a f.a%type;
v_b f.b%type;
begin
open c_f;
loop
fetch c_f into v_a, v_b;
exit when c_f%notfound;
update f set a=v_a*v_a where current of c_f;
end loop;
close c_f;
end;
/
exec wco;
select * from f;
drop table f;
drop procedure wco;
sarvestan
دوشنبه 29 آبان 1385, 16:20 عصر
فردا مقاله ای درباره Cursor ها خواهم گذاشت! ظاهرن مشکل خیلی ها شده!
rezaei manesh
دوشنبه 29 آبان 1385, 16:21 عصر
ممنون آدرس اونو به من هم بدین
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.