Ahmad.Hasan بتاريخ: 1 يناير 2012 تقديم بلاغ مشاركة بتاريخ: 1 يناير 2012 السلام عليكم ورحمة الله وبركاته،،، بعد البحث المطول في حل مشكلة قراءة Sqlldr.exe من الـ Client على السيرفر توصلت لحل أفضل وهو كالتالي: 1- الملف الموجود فيه البيانات لدي من نوع Csv. 2- قمت بإنشاء Directory على السيرفر كالتالي: Create Or Replace Directory Ora_Dir As 'D:\' 3- قمت بإنشاء External Table، حيث يتم تحديد اسم الـ Directory وإسم الـ File ليقوم بإدخال بيانات الملف في الجدول بعمود واحد فقط ويفصل بين البيانات فاصلة منقوطة كالتالي: Create Table Staging (Col1 Varchar2(4000)) Organization External ( Type Oracle_Loader Default Directory Ora_Dir Access Parameters ( Records Delimited By NewLine Logfile 'staging.log' Fields Ldrtrim Missing Field Values Are Null Reject Rows With All Null Fields ("COL1" Char(4000)) ) Location ('Stc_File.Csv') )Reject Limit Unlimited / 4- قمت بإنشاء Procedure يقوم على أخذ الـ Column Heading من الملف ويناءا على أسماء الأعمدة يتم إنشاء جدول ويأخذ إسم الجدول المراد انشاؤه و إسم الملف ونوع Delimiter وأي Parameters أخرى تلزمك في الكود، حيث أن الجدول الذي سيتم إنشاؤه اسمه Import_Stc_Daily_Reports_Tbl كالتالي: Create Or Replace Procedure Sale.Create_Source_Tab (P_Filename In Varchar2, P_Delim In Varchar2, P_Tablename In Varchar2, P_Import_Id In Number, P_Import_Date In Date, P_User_Id In Varchar2) As V_Sql Varchar2 (32767); V_Inser Varchar2 (32767); V_Count Number; Vn_Counter Number := 1; Vn_Col_Count Number := 0; Begin If Upper(P_Tablename) = Upper('Import_Stc_Daily_Reports_Tbl') Then Execute Immediate 'alter table staging location (''' || P_Filename || ''')'; Select 'create table ' || P_Tablename || '(rn,' || Replace (Col1, P_Delim, ',') || ') as select * from (select rownum rn' Into V_Sql From Staging Where Rownum = 1; Select Length(Col1) - Length(Replace(Col1, P_Delim, '')) + 1 Into V_Count From Staging Where Rownum = 1; For I In 1 .. V_Count Loop V_Sql := V_Sql || ',substr (''' || P_Delim || ''' || col1 || ''' || P_Delim || ''', instr (''' || P_Delim || ''' || col1 || ''' || P_Delim || ''', ''' || P_Delim || ''', 1, ' || I || ') + ' || Length (P_Delim) || ', instr (''' || P_Delim || ''' || col1 || ''' || P_Delim || ''', ''' || P_Delim || ''', 1, ' || To_Char (I + 1) || ') - instr (''' || P_Delim || ''' || col1 || ''' || P_Delim || ''', ''' || P_Delim || ''', 1, ' || I || ') - ' || Length (P_Delim) || ')'; End Loop; V_Sql := V_Sql || ' from staging) where rn > 1'; Execute Immediate V_Sql; V_Inser:= 'Insert Into Import_Stc_Daily_Reports_Dtl (Serial_No, Import_Id, Import_Date, Employee_Name, Employee_Login, Employee_Position, Division_Organization_Name, Product_Line, Product, Parent_Product, Product_Alias_Name, Device_Product, Product_Atm_Type, Service_Type, Order_Number, Order_Type_I, Order_Sub_Type_I, Order_Date, Sim_Number, Serial_Number, Primary_Multiline_Number, Status_I, Order_Status_I, Order_Status, Order_Type, Order_Sub_Type, Account_Number, Account_Type_I, Company_Id_Type_I, Account_Sub_Type_I, Account_Sub_Type, Tamayoz_Type, Tamayoz_Type_I, Commercial_Registration_Number, Avg_Usage, Customer_Value, Account_Type, Company_Id_Type, Customer_Age_Value, City, Payment_Value, Net_Price, Start_Price, Action_Type_I, Action_Type, Current_Billing_Account_Number, Nationality, Full_Name, Middle_Name, First_Name, Last_Name)'|| 'Select Rn'|| ',' || P_Import_Id || ',''' || P_Import_Date || ''',' ||'Employee_Name, Employee_Login, Employee_Position, Division_Organization_Name, Product_Line, Product, Parent_Product, Product_Alias_Name, Device_Product, Product_Atm_Type, Service_Type, Order_Number, Order_Type_I, Order_Sub_Type_I, Order_Date, Sim_Number, Serial_Number, Primary_Multiline_Number, Status_I, Order_Status_I, Order_Status, Order_Type, Order_Sub_Type, Account_Number, Account_Type_I, Company_Id_Type_I, Account_Sub_Type_I, Account_Sub_Type, Tamayoz_Type, Tamayoz_Type_I, Commercial_Registration_Number, Avg_Usage, Customer_Value, Account_Type, Company_Id_Type, Customer_Age_Value, City, Payment_Value, Net_Price, Start_Price, Action_Type_I, Action_Type, Current_Billing_Account_Number, Nationality, Full_Name, Middle_Name, First_Name, Last_Name From '||P_Tablename; Execute Immediate V_Inser; --Dbms_Output.Put_Line (V_Inser); Commit; Execute Immediate 'Drop Table '||P_Tablename; End If; End Create_Source_Tab; / 5- لغاية هذه المرحلة يمكنك تحميل الملف من خلال التود أو Sql Plus. 6- إذا أردت تشغيل الكود من خلال الفورم فاستخدم الـ Web-util لعمل Browse للملف المطلوب ويجب نقل الملف من جهاز الكلينت الى السيرفر وتحديدا على الـ Directory الذي تم إنشاؤه سابقا، إذا كنت تستخدم AS فاستخدم الكود التالي: Webutil_File_Transfer.Client_To_AS('C:\\Stc_File.Csv', '\\10.1.70.186\d\Stc_File.Csv'); وإذا لا يوجد لديك AS فابمكانك استخدام : Client_Host('Cmd.exe /C Copy C:\Stc_File.Csv \\10.1.70.186\D\Stc_File.Csv'); ولغاية هذه النقطة تم نقل الملف من الكلينت الى السيرفر. 7- نأتي الآن لعمل Execute للبروسيجر: Create_Source_Tab(/*Substr(:Blk_1.File_Name, 4)*/'Stc_File.Csv', ';', 'Import_Stc_Daily_Reports_Tbl', :Blk_1.Import_Id, :Blk_1.Import_Date, :Global.User); بامكانك تمرير إسم الملف مباشرة أو بعد عملية الـ Browse وضع إسم الملف في Variable وتمريره في البروسيجر. 8- بعد الإنتهاء من عملية الـ Import بامكانك حذف الملف من السيرفر كالتالي: Client_Host('Cmd.exe /C Del \\10.1.70.186\D\Stc_File.Csv'); * ملاحظة 1: يجب تمرير إسم الملف فقط في البروسيجر يعني لو عملت Browse واعطاك إسم الملف مع الـ Path يجب تمرير إسم الملف فقط ويمكنك استخدام Substr او الطريقة التي تناسبك.* ملاحظة 2: الـ Column Headings يجب أن تكون على صيغة Employee_Name، يعني في حال كان Label العمود من أكثر من كلمة يجب إستبدال المسافة التي بين الكلمتين بـ ( _ ). أتمنى أن أكون قد وفقت في شرح الموضوع بطريقة واضحة. التوفيق للجميع. 2 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mmsalman87 بتاريخ: 1 يناير 2012 تقديم بلاغ مشاركة بتاريخ: 1 يناير 2012 بارك الله فيك وجزاك كل خير كبير من يومك يا احمد اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Ahmad.Hasan بتاريخ: 1 يناير 2012 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 1 يناير 2012 تسلم يا ماهر..واشكرك لمرورك الكريم.. 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Amgad بتاريخ: 1 يناير 2012 تقديم بلاغ مشاركة بتاريخ: 1 يناير 2012 السلام عليكم ورحمة الله الأخ الفاضل / احمد كما عودتنا دائما ... تأتى بكل ما هو جديد ومفيد للأخوة الأعضاءمع اسلوب وطريقة عرض سهلة وواضحة بالأمثلة جزاك الله خيرا على هذا الجهد المتميز تقبل تحياتي اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
scince بتاريخ: 1 يناير 2012 تقديم بلاغ مشاركة بتاريخ: 1 يناير 2012 (معدل) الاخ العزيز احمد بارك الله فيك بصراحة تسلسل في الافكار ووضوح فيها وبساطة في الطرح وابتكار للحل فأنت تستحق كل الشكر والتقدير على هذه المعلومة تم تعديل 1 يناير 2012 بواسطة scince اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Ahmad.Hasan بتاريخ: 2 يناير 2012 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 2 يناير 2012 السلام عليكم ورحمة الله الأخ الفاضل / احمد كما عودتنا دائما ... تأتى بكل ما هو جديد ومفيد للأخوة الأعضاءمع اسلوب وطريقة عرض سهلة وواضحة بالأمثلة جزاك الله خيرا على هذا الجهد المتميز تقبل تحياتي جزاك الله كل خير أخي أمجد..وشكرا جزيلا لك.. اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Ahmad.Hasan بتاريخ: 2 يناير 2012 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 2 يناير 2012 الاخ العزيز احمد بارك الله فيك بصراحة تسلسل في الافكار ووضوح فيها وبساطة في الطرح وابتكار للحل فأنت تستحق كل الشكر والتقدير على هذه المعلومة أشكرك أخي ميهال على مرورك الكريم.. اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
al-ayham02 بتاريخ: 17 أبريل 2012 تقديم بلاغ مشاركة بتاريخ: 17 أبريل 2012 بارك الله فيك ، وجعلك من الصالحين اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ENG.MOUSTAFA MAHMOUD بتاريخ: 2 مايو 2012 تقديم بلاغ مشاركة بتاريخ: 2 مايو 2012 اللهم اجعل أمـَي ممنتقول لها النار :{أعبري فإن نورك أطفا نــاري }وتقول لها الجنه :{ أقبلي فقد اشتقت إليك قبل ان أراك 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ommat بتاريخ: 1 أبريل 2014 تقديم بلاغ مشاركة بتاريخ: 1 أبريل 2014 السلام عليكم ، اريد مساعدة فيتصدير بيانات ملفات من النوع txt حيث تٌنتج من بعضالتطبيقات الاخرى وعندما استخدم loader في تصديرداخل قاعدة اوراكل ، فأن ال loader يقوم بتسجيلهافي ال Table بتقسيمها على اكثر من سجل مع العلم بأنبيانات الملف سجل واحدالسؤال هو : كيف يمكن تجنب هذة المشكله وتسجيلبيانات تلك الملف على سجل واحد2- هل من وسيلة تستخدم في الاوراكل لتصدير بياناتمن اكثر من ملف على نفس folder الى قاعدة البياناتبدون تدخل من المستخدم (بطريقة اتوماتيكية).ولكم جزيل الشكر والعرفان (مرفق ملف من نوعيةهذة البيانات) اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Ahmad.Hasan بتاريخ: 2 أبريل 2014 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 2 أبريل 2014 السلام عليكم يرجى ارفاق الكود المكتوب ! اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
anas.soft بتاريخ: 2 أبريل 2014 تقديم بلاغ مشاركة بتاريخ: 2 أبريل 2014 اشكرك اخي احمد موضوع متميز وشرح جميل من اخ رئع بارك الله فيك 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ommat بتاريخ: 12 أبريل 2014 تقديم بلاغ مشاركة بتاريخ: 12 أبريل 2014 الاخ العزيز احمد بارك الله فيك بصراحة تسلسل في الافكار ووضوح فيها وبساطة في الطرح وابتكار للحل فأنت تستحق كل الشكر والتقدير على هذه المعلومة أشكرك أخي ميهال على مرورك الكريم.. اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ommat بتاريخ: 12 أبريل 2014 تقديم بلاغ مشاركة بتاريخ: 12 أبريل 2014 السلام عليكم ورحمة الله وبركاته اريد مساعدة في الاتي: 1- تصدير البيانات من الملف بمجرد حفظ الملف على الـ folder 2- هذة العملية سيتم تكرارها يوميا وبعدد من المرات (في نهاية اليوم أو بمجرد حفظ الملف في الـ folder ) 3- هذا الملف متكرر ويوميا وليس بنفس الاسم ولكن بأسماء مختلفة ولكنهم بنفس التنسيق 4- تنفيذ هذة العملية اتوماتيكية بدون تدخل المستخدم مرفق عدد من الملفات المراد تصدير بياناتها الى قاعدة البيانات في table مكون من one column وعدد حروفة varchar2(4000)h أرجو المساعدة للضرورة القصوى ولكم جزيل الشكر والعرفان مع العلم بانه كلما صدرته بال sqlloader فإنه يسجله فى ال table على اكثر من سجل ولكني اريدة كل ملف على حدة كسجل واحد فقط واليك نسخة من بعض بيانات الملفات وهي كالاتي: وهذا أول ملف T51G773392015750001821NOV131328 SV065SAUDI ARABIAN AIRLINES 23NOV13D9DAE7E93AC2 7IM17IM190201996 XQBPFM 65M1MANAHAG20NOV1300121NOV13007 EGP0000003990002EGP00000000 00000000 00000000 00000000 00000000 000000000300 -SVI2EG1213 NNNYN5NNYAYH NNNX EG 000000002000002001000001000001001000001000000000 A02IBRAHEM/MOHAMEDJABERMR 325516997353506545256501 ADT 01 N TL:23NOV13C35:N A02NOHA/MAHMOUDAWARAMRS 325516998313506545256601 ADT 01 N TL:23NOV13C35:N A0401SV065SAUDI ARABIA 316Q HK23NOV1700 1950 2CAICAIRO MEDMADINAH IN O0 320 T1 00641F TK:YJT:01.50ANL:SAUDI ARABIAN AIRLINES A0403SV065SAUDI ARABIA 303T HK28NOV1715 1830 2JEDJEDDAH CAICAIRO IN O0 772 S 00769F TK:YJT:02.15ANL:SAUDI ARABIAN AIRLINES A0502 ARNK A0701EGP 1995.00EGP 2698.00 EGPT1: 100.00EGT2: 7.00EQT3: 596.00XT IT: 50.00JK 140.00QH 150.00XK 11.00XL 151.00IO 94.00UR A080101QRTSVR 0000000023NOV1323NOV13 F:QRTSVR E:NON ENDORSABLE PLZ VISIT E:SAUDIAIRLINES.COM/TERMS B:2PC A080103TRTSVR 0000000028NOV1328NOV13 F:TRTSVR E:NON ENDORSABLE PLZ VISIT E:SAUDIAIRLINES.COM/TERMS B:2PC A09010CAI SV MED 150.69 /-JED SV CAI 138.38 NUC289.07END ROE6.90127 XT 50.00JK140.00QH150.00XK11.00XL151.00IO94.00UR A11S 5396.00N A12CAIT *DAR ALSALAM TOURS 01001314753 A14VL-140020NOVMUCRM1AYQFCE9 هذا هو بيانات الملف الثاني: T51G773392016160000314NOV130835 SV065SAUDI ARABIAN AIRLINES 14NOV13D9DAE7E93AC2 7IM17IM190201996 R9ZKLY 3l31AHNAHAG06NOV1300813NOV13026 EGP0000002828002EGP00000000 00000000 00000000 00000000 00000000 000000000000 NYNYN5YNYAYH NNNX EG 000000001000002001000001001001001000001000000000 A02GABR/MOHAMEDHOUSSAMELDINMR 317264097823506543605301 ADT 0101N TL:14NOV13C35:N A0401SV065SAUDI ARABIA 316I HK14NOV1710 2000 2CAICAIRO MEDMADINAH IN O0 772 T1 00641F TK:YJT:01.50ANL:SAUDI ARABIAN AIRLINES A0403SV065SAUDI ARABIA 303I HK18NOV1715 1830 2JEDJEDDAH CAICAIRO IN O0 333 S 00769F TK:YJT:02.15ANL:SAUDI ARABIAN AIRLINES A0502 ARNK A0701EGP 2828.00EGP 2839.00 EGPT1: 11.00XL A080101INATDAY 0000000014NOV1314NOV13 F:INATDAY E:NON ENDORSABLE PLZ VISIT E:SAUDIAIRLINES.COM/TERMS B:2PC A080103INATDAY 0000000018NOV1318NOV13 F:INATDAY E:NON ENDORSABLE PLZ VISIT E:SAUDIAIRLINES.COM/TERMS B:2PC A09010CAI SV MED//JED M204.88INATDAY SV CAI 204.88INATDAY NUC409.76 END ROE6.90127END ROE6.90127 XT PD7.00EQ PD596.00XT A100106NOV139020199 CAI S A TI:0655065436024613 EGP000004040.00 T1: 100.00EGT2: 7.00EQT3: 596.00XTT4: T5: 000004743.00000000000000 A11S 11.00N P:01 A12CAIT * DAR ALSALAM TOURS 0502313626 REF AHMED A14VL-084813NOVMUCRM1AYU3MGG وهذا هو بيانات الملف الثالث T51G773392016010001016NOV131226 MS077EGYPTAIR 15NOV13D9DAE7E93AC2 7IM17IM190201996 ZH7HW8 hg51AHNAHAG03NOV1301316NOV13050 EGP0000004025002EGP00000000 00000000 00000000 00000000 00000000 000000000000 NYNYN5YNYAYH NNNX EG 000000001000002001000001001001001000001000000000 A02GABR/HOUSSAMELDINMR 320225171803506543607501 ADT 0101N TL:15NOV13C35:N A0401MS077EGYPTAIR 677C HK15NOV1550 1840 2CAICAIRO MEDMADINAH INM O0 320 T3 00641F TK:YJT:01.50ANL:EGYPTAIR A0403MS077EGYPTAIR 672Z HK18NOV1830 1950 2JEDJEDDAH CAICAIRO INM O0 330 N 00769F TK:YJT:02.20ANL:EGYPTAIR A0502 ARNK A0701EGP 4025.00EGP 4336.00 EGPT1: 300.00CPT2: 11.00XL A080101CRSEG 00000000 F:CRSEG E:DEPARTURE-ARRIVAL FOR E:MADINAH AND JEDDAH FROM B:2PC A080103ZREEG 0000000018NOV1318NOV13 F:ZREEG E:DEPARTURE-ARRIVAL FOR E:MADINAH AND JEDDAH FROM B:2PC A09010CAI MS MED 322.40CRSEG /-JED MS CAI 260.82ZREEG NUC583.22END ROE6.90127END ROE6.90127 A100114NOV139020199 CAI S A TI:077506543606213 EGP000004025.00 T1: T2: T3: T4: T5: 000004025.00000000000000 A11S 311.00N P:01 A12CAIT * DAR ALSALAM TOURS 0502313626 REF AHMED A14VL-120216NOVMUCRM1A7TSSHR اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ommat بتاريخ: 12 أبريل 2014 تقديم بلاغ مشاركة بتاريخ: 12 أبريل 2014 ولكم جزيل الشكر والعرفان اخيكم جمال اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.