computic_147_11 بتاريخ: 1 ديسمبر 2008 تقديم بلاغ مشاركة بتاريخ: 1 ديسمبر 2008 ارجو من ذوي الخبره مساعدتي في كتابة الكود التالي إذا كان ذلك ممكننفترض أن لدينا جدول اسمه 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; هذا الكود لا يعطيني القيمة المخزنة داخل الحفول وهذا ما أريده أرجوا مساعدتي في إيجاد قيم الحقول داخل اللوب . اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
khaledmega بتاريخ: 1 ديسمبر 2008 تقديم بلاغ مشاركة بتاريخ: 1 ديسمبر 2008 M := J.C_1 ; dbms_output.put_line(m); اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
MMA بتاريخ: 2 ديسمبر 2008 تقديم بلاغ مشاركة بتاريخ: 2 ديسمبر 2008 نفرض أن لدينا الجدول التالي : 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; / فأعتقد أن هذا حل مبدئي !!!!!!ملحوظة ، منتظرين الردبالتوفيق للجميع اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.