الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Using One Cursor To Many Table > سؤال

بدأه Nadooe في 12 مايو 2009 · 11 رد · 2,257 مشاهدة · في قسم لغةالاجرائات Pl/sql
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

ممكن بس اعرف خطأي بهالكود

create table one(

id number , name varchar2(15),age number );

insert into one values(1,'ali',20)

insert into one values(2,'ahmed',21)

create table twoo(

id number , name varchar2(15),age number );

insert into twoo values(3,'fahad',23)

insert into twoo values(4,'yazeed',29)

create table three(

id number , name varchar2(15),age number );

declare

cursor c is select * from one,twoo ;

s1 one%rowtype ;

s2 twoo%rowtype ;

begin

open c ;

loop

fetch c into s1 ;

insert into three values(s1.id,s1.name,s1.age);

fetch c into s2 ;

insert into three values(s2.id,s2.name,s2.age);

end loop ;

close c ;

end

;

انشأت في البدايه جدولين وكل جدول يحتوي على

2 record

واريد اضافه الريكوردات اللي بالجدولين الى الجدول الثالث

تم تعديل هذه المشاركة بواسطة Nadooe في 12 مايو 2009 في 11:01

#2

السلام عليكم

اخي الكريم الخطأ باعتقادي انك مستخدم داخل جملة التكرار نفس اسم الكيرسر

وهي c

وهذا لايجوز

في هذه الحالة قم بأنشاء 2 كيرسير

وتعامل معهم كل واحد لوحدة

والله تعالى اعلم

مع خالص احترامي

لا اله الا الله العلي العظيم لا اله الا الله الحليم الكريم

لا اله الا الله وحده لا شريك له له الملك وله الحمد وهو على كل شي قدير

#3

ايه نعم اقدر اسويها اخوي

بس اللي ابيه انا اني اتعامل مع كل الجدولين بـ cursor واحد يس :(

#5

اهلين اخوي ثامر

انت قصدك يعني لازم يكون عمود في الجدول الاول هو نفس العمود في الجدول الثاني

يكون الاول PK

واللي بالجدول الثاني FK

؟؟

هذا قصدك

#7

يعني مثلاً الجدول الاول يكون فيه ( ID,NAME.AGE )

والجدول الثاني يكون فيه (ID,SALARY,etc )

و ID يكون نفسه ؟

طيب الان لو بيضيف 2 ريكورد من الجدولين بالجدول الثالث بتكون جنب بعض او فوق بعض ؟

#8

السلام عليكم ورحمة الله و بركاته

يمكن أخوي هذا الكود يفيدك إن شاء الله

أنا وضعت جداول بدائية لكي تسهل العمل لدي و يمكنك إستخدام هذا الكود بعد تعديل الأشياء اللتي تراها مناسبة

الجداول أنا سميتها على هذا الترتيب

الجدول الأول

create table x1(
a1 number (5) constraint aa_1 primary kry,
a2 varchar2 (10),
a3 number (5));

الجدول الثاني

create table x2(
b1 number (5) constraint bb_1 primary key,
a1 number (5) references x1(a1),
b2 varchar2 (10),
b3 number (5));

الجدول الثالث

create table x3(
c1 number (5) constraint cc_1 primary key,
a1 number (5) references x1(a1),
b1 number (5) references x2(b1),
c2 varchar2 (10),
c3 number (5));

declare
cursor c1 is select
x1.a1,x1.a2,x1.a3,x2.b1,x2.b2,x2.b3
from x1,x2 where x1.a1=x2.a1;

id11 number (5);
id22 number (5);
name12 varchar2 (10);
age12 number (5);
name21 varchar2 (10);
age22 number (5);
id1 number (5) :=&w1;
name1 varchar2 (10) :='&w2';
age1 number  (5):=&w3;
id2 number (5):=&z1;
name2 varchar2 (10):='&z2';
age2 number (5):=&z3;
num number (5):=&xx;رقم أساسي للجدول الثالث
begin insert into x1(a1,a2,a3) values(id1,name1,age1);
commit;
insert into x2(b1,a1,b2,b3) values(id2,id1,name2,age2);
commit;
open c1;
fetch c1 into id11,name12,age12,id22,name21,age22; dbms_output.put_line(id11||' '||name12||' '||age12||' '||id22||' '||name21||' '||age22);
insert into x3(c1,b1,a1,c21,c22,c12,c122) values(num,id2,id1,name1,name2,age1,age2);
commit;
close c1;
end;
#9

الحل بكل سهولة هوان تجهل نمط الريكورد من نفس نمط ال cursor

rec c%ROWTYPE;

#10

اخي العزيز المشكلة في كيفية كتابة الـ Cursor

يجب وضع Union بين الجدولين ولا يوجد * .......

لاي استفسار ارجو ان تسال

لا تاسفن على غدر الزمان فلطالما

رقصت على جثث الاسود كلاب

لا تحسبن برقصها تعلو على اسيادها

فتبقى الاسود اسود و الكلاب كلاب

Troy079@hotmail.com

#11

كلام mah_yabroudy صحيح

عندها يكون الكود كالتالي



create table one(
id number , name varchar2(15),age number );
insert into one values(1,'ali',20)
insert into one values(2,'ahmed',21)


create table twoo(
id number , name varchar2(15),age number );
insert into twoo values(3,'fahad',23)
insert into twoo values(4,'yazeed',29)


create table three(
id number , name varchar2(15),age number );



declare

cursor c is
select id,name,age from one
union all
select id,name,age from twoo;

s1 one%rowtype ;
begin
open c ;
loop
fetch c into s1 ;
insert into three values(s1.id,s1.name,s1.age);
exit when c%notfound;
end loop ;
close c ;
end ;

ارجو ان يكون تم حل المشكلة

تم تعديل هذه المشاركة بواسطة fujitsu في 1 ديسمبر 2010 في 17:17

#12
DECLARE
TYPE RECTYP IS REF CURSOR;
MYREC1 RECTYP;
BEGIN
OPEN MYREC1 FOR SELECT ID,
CURSOR(SELECT E.ID FROM TABLE_TWOO WHERE D.ID =E.ID)
FROM TABLE_ONE D;
END;

وهذا مثال اكثر وضحا

set serveroutput on

declare
  type rctyp is ref cursor;

  myrc1  rctyp;
  myrc2  rctyp;
  empno  number;
  deptno number;
  ename  varchar2(50);
  dname  varchar2(50);

begin
  open myrc1 for select department_name,
                        cursor(select e.employee_id, e.first_name
                               from employees e
                               where e.department_id = d.department_id)
                 from departments d;

  fetch myrc1 into dname, myrc2;
  while myrc1%FOUND loop
    dbms_output.put_line('deptno = ' || dname);
    fetch myrc2 into empno, ename;
    while myrc2%FOUND loop
       dbms_output.put_line('empno = ' || empno || ' ename = ' || ename);
       fetch myrc2 into empno, ename;
    end loop;
    fetch myrc1 into dname, myrc2;
  end loop;
  close myrc1;
/

end;

تم تعديل هذه المشاركة بواسطة Ahmed.Arafa في 27 نوفمبر 2011 في 03:26

مواضيع مشابهة