الانتقال إلى المحتوى

اريد عمل كود لأغجراء نفس العمليات لكل حقل بواسطة Loop


computic_147_11

Recommended Posts

ارجو من ذوي الخبره مساعدتي في كتابة الكود التالي إذا كان ذلك ممكن
نفترض أن لدينا جدول اسمه tab ويحتوي على حقول تسمياتها كما يلي
c_1 , c_2 , c_3 , c_4
وهذه الحقول تحتوي على بيانات رقمية أريد اجراء نفس العمليات لكل حقل على حده وقمت بكتابة كود لكن لم أستطع الحصول على هذه القيم بواسطة loop والكود الذي كتبته كالتالي

declare
cursor c1 is select * from tab; m  varchar2(30);
begin for i in c1 loop
  for j in 1..4 loop
   m:='i.c_'||j;
  dbms_output.put_line(m);
  end loop;
end loop;
end;


هذا الكود لا يعطيني القيمة المخزنة داخل الحفول وهذا ما أريده
أرجوا مساعدتي في إيجاد قيم الحقول داخل اللوب .

رابط هذا التعليق
شارك

نفرض أن لدينا الجدول التالي :

CREATE TABLE TBL
(
 C_1  NUMBER(10),
 C_2  NUMBER(10),
 C_3  NUMBER(10),
 C_4  NUMBER(10)
)
/
INSERT INTO TBL VALUES(1,2,3,4);
INSERT INTO TBL VALUES(5,6,7,8);
INSERT INTO TBL VALUES(9,10,11,12);
COMMIT;



الأخ الكريم ، أنا حاولت من قبل أستخدم هذا الكود :

declare
 cursor c1 is select * from TBL; 
 m varchar2(30);
begin 
 for i in c1 loop
for j in 1..4 loop
  m := i.c_& j;
  dbms_output.put_line(m);
end loop;
 end loop;
end; 
/



ولكن تطالبنا بقيمة واحدة ، وللأسف لم أعلم طريقة الحل المباشر ، فياريت لو أحد يعلم حل هذه المشكلة بحيث أن تتكيف مع قيمة المتغير J يجعل هذا في موازين حسناتة.

عموماً أنا لدي حل مبدئي ، فليس من المعقول أن نتقيد بشيء !!!

أنظر الي الكود التالي كاملاً :

CREATE TABLE TBL
(
 C_1  NUMBER(10),
 C_2  NUMBER(10),
 C_3  NUMBER(10),
 C_4  NUMBER(10)
)
/
INSERT INTO TBL VALUES(1,2,3,4);
INSERT INTO TBL VALUES(5,6,7,8);
INSERT INTO TBL VALUES(9,10,11,12);
COMMIT;

SET SERVEROUTPUT ON
DECLARE
 CURSOR C1 IS SELECT ROWID FROM TBL;
 M VARCHAR2(30);
 FUNCTION GET_VALUE(IN_SQL VARCHAR2) RETURN NUMBER
 AS
ID_RETURN  NUMBER(20,3);
 BEGIN
EXECUTE IMMEDIATE IN_SQL INTO ID_RETURN;
RETURN ID_RETURN;
 EXCEPTION
WHEN OTHERS THEN
  RETURN '';
 END;
BEGIN
 FOR I IN C1 LOOP
FOR J IN 1..4 LOOP
  DBMS_OUTPUT.PUT_LINE(GET_VALUE('SELECT C_' || TRIM(J) || ' FROM TBL WHERE ROWID = ' || CHR(39) || I.ROWID || CHR(39)));
END LOOP;
 END LOOP;
END;
/



فأعتقد أن هذا حل مبدئي !!!!!!



ملحوظة ، منتظرين الرد




بالتوفيق للجميع

رابط هذا التعليق
شارك

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية