sqlplus إزالة r n t من التخزين المؤقت
سؤال
هل هناك أي أمر sql*plus لإزالته \r
\n
و\t
من مجموعة النتائج التي ستخرج إلى ملف التخزين المؤقت؟ هذا ، "تقليم" كل سجل؟
لقد استخدمنا set trim on
في الماضي ، ولكن لا يبدو أن ما نحتاجه الآن. أحاول تجنب استدعاء ترجمة Oracle ، وظائف CHR في استعلام SQL.
فمثلا،
set termout off
set spool somefile.dat
set lin 600
select data from mytable;
set spool off;
exit;
استعلامي يعيد هذا
|DATA|
|\n \t\t\t\t\t thisistheactualdata \t\t\t\t\t\t\n|
وأرغب في الاحتفاظ بهذا في ملف التخزين المؤقت
thisistheactualdata
تحديث
حسنًا ، انتهى بنا الأمر إلى فعل شيء كهذا.
set tab off;
spool /home/oracle/out.dat
set linesize 20
set termout off
set trim on
select regexp_replace(l,'(\t|\n)','') from test;
spool off;
exit;
لكن حصلت على بعض الأخبار السيئة: نحن بحاجة إلى تشغيل هذا في Oracle 8 ، ويبدو أن regexp_replace لا يبدو متاحًا. :(
شكرا مقدما.
المحلول
لا أعتقد أنك ستتمكن من القيام بذلك باستخدام SQLبالإضافة إلى التوجيه. SQLPlus هو عميل رفيع جدًا وليس مصممًا لمس البيانات من مجموعة النتيجة نفسها.
إذا كنت لا ترغب في استخدام وظائف SQL المدمجة لتعديل الإخراج ، فأعتقد أنك عالق مع ملف ما بعد المعالجة.
تحرير بواسطة Dcookie: نظرًا لأنني فاتني طلب OP الأصلي للحصول على حل غير قابل للنقل/CHR (ركزت على رثاء البروتوكول الاختياري على أنهم عالقون بـ 8i) ، في الإنصاف إلى DPBradley ، سأسحب إجابتي وأدرجها وأدرجها كجزء من هذا ، لأنه كان يعتبر بوضوح. هذا ما كتبته:
قد تجرب وظيفة الترجمة لموقف Oracle 8 الخاص بك:
SELECT TRANSLATE(L,'A'||CHR(10)||CHR(9)||CHR(13),'A') FROM test;
نصائح أخرى
دون تجربته ، يفعل
SET TAB OFF
هل لديك التأثير المطلوب؟