سؤال
أقوم بتشغيل أوراكل ولدي استعلام يسحب بعض النتائج من قاعدة البيانات.أود أن أكتب النتائج كملف نصي.كيف لي أن تذهب عن القيام بذلك؟
الطريقة المفضلة لدي هي استخدام UTL_FILE.هل سيكون لدى أحدهم مثال على كيفية القيام بذلك؟
المحلول
إذا كنت تستخدم PL/SQL، فيمكنك استخدام حزمة UTL_FILE، والفرق عن استخدام sql+ spool هو أن الملفات مكتوبة على نظام ملفات الخادم.يحتوي UTL_FILE على عدد من القيود، لذا فإن البديل من جانب الخادم هو استخدام إجراءات Java المخزنة.
نصائح أخرى
إذا كنت تستخدم Sql Plus، فالأمر سهل مثل:
SQL> spool c:\temp\out.txt SQL> SELECT * FROM USERS; SQL> spool off
ستنتج هذه الجمل الثلاثة نتيجة الاستعلام "SELECT * FROM USERS" إلى الملف c: emp\out.txt.
يمكنك تنسيق هذا الاستعلام باستخدام وظائف معالجة السلسلة في Oracle.
استخدم UTL_FILE مع CREATE DIRECTORY لسهولة تعيين مسار الدليل باسم (لا يقوم بإنشاء الدليل الفعلي مجرد مرجع له لذا تأكد من إنشائه أولاً)
مثال
create directory logfile as 'd:\logfile'; -- must have priv to do this
declare
vFile utl_file.file_type;
begin
vFile := utl_file.fopen(logfile ,'syslog','w'); -- w is write. This returns file handle
utl_file.put(vFile,'Start Logfile'); -- note use of file handle vFile
utl_file.fclose(vFile); -- note use of file handle vFile
end;
إذا كنت تقوم بتشغيل الاستعلام من com.sqlplus يمكنك استخدام أمر التخزين المؤقت:
spool /tmp/test.spool
بعد تنفيذ أمر التخزين المؤقت خلال الجلسة، يتم إرسال كافة المخرجات إلى وحدة تحكم sqlplus بالإضافة إلى الملف النصي /tmp/test.spool.
يبدو أن هذا برنامج تعليمي معقول مع بعض الأمثلة البسيطة مثال UTL_FILE