ورود

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 عصر
ممنون آدرس اونو به من هم بدین