چه جوری در یک پروسیجر یک متغیری تعریف کنم که شبیه یک دیتا ریدر عمل کنه؟ که بتونم خروجی یک سلکت رو در اون بذارم و به تعداد خروجی ها در جدول insert کنم
اگه می شه یه تیکه کد معرفی کنید
Printable View
چه جوری در یک پروسیجر یک متغیری تعریف کنم که شبیه یک دیتا ریدر عمل کنه؟ که بتونم خروجی یک سلکت رو در اون بذارم و به تعداد خروجی ها در جدول insert کنم
اگه می شه یه تیکه کد معرفی کنید
اگر منظورتون اینه که خروجی دستور Select وارد جدول دیگه ای بشه، میتونین از خود دستور Insert استفاده کنین:
INSERT MyTable SELECT * FROM MySecondTable
آره دقیقا اما نه همه فیلد ها رو به همون شکل بلکه با کمی تغییر که در کل فقط یک جدول دیگره
برم امتهان کنم خیلی خیلی ممنونم
این "کمی تغییر" که میفرمایید چجور تغییریه؟ میشه در یک Query حلش کرد؟
بازهم توصیه ام استفاده از CURSOR ها است!
با یک CURSOR میتوان به یک مجموعه از رکورد ها اشاره کرد!
و در عین حال به هر رکورد در این مجموعه دسترسی داشت! این دسترسی می تواند بصورت فقط خواندنی باشد و یا دسترسی خواندن و نوشتن( اولی سریعتره)!
جستجو در سایت و کمی GOOGLING مشکل شما را در این رابطه حل میفرماید
آقا جواب نگرفتم
من چطور می تونم همچین دستوری رو برای 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/cur...or_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;
فردا مقاله ای درباره Cursor ها خواهم گذاشت! ظاهرن مشکل خیلی ها شده!
ممنون آدرس اونو به من هم بدین