سؤال

أقوم بتشغيل أوراكل ولدي استعلام يسحب بعض النتائج من قاعدة البيانات.أود أن أكتب النتائج كملف نصي.كيف لي أن تذهب عن القيام بذلك؟

الطريقة المفضلة لدي هي استخدام 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top