سؤال

هل هناك أي أمر 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

هل لديك التأثير المطلوب؟

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