मैं SQLPLUS का उपयोग कर एक CSV प्रारूपित फ़ाइल में कैसे स्पूल करूं?



Answers

मैं स्क्रिप्ट के लिए इस कमांड का उपयोग करता हूं जो आयामी तालिकाओं (डीडब्ल्यू) के लिए डेटा निकालता है। तो, मैं निम्नलिखित वाक्यविन्यास का उपयोग करता हूं:

set colsep '|'
set echo off
set feedback off
set linesize 1000
set pagesize 0
set sqlprompt ''
set trimspool on
set headsep off

spool output.dat

select '|', <table>.*, '|'
  from <table>
where <conditions>

spool off

और काम करता है। मैं आउटपुट फ़ाइल प्रारूप के लिए sed का उपयोग नहीं करते हैं।

Question

मैं कुछ प्रश्नों को एक CSV आउटपुट प्रारूप में निकालना चाहता हूं। दुर्भाग्यवश, मैं इसे करने के लिए किसी भी फैंसी एसक्यूएल क्लाइंट या किसी भी भाषा का उपयोग नहीं कर सकता। मुझे SQLPLUS का उपयोग करना होगा।

मैं यह कैसे करुं?




यदि आप 12.2 का उपयोग कर रहे हैं, तो आप बस कह सकते हैं

set markup csv on



मैंने एक बार एक छोटी एसक्यूएल * प्लस स्क्रिप्ट लिखी है जो एक csv (वास्तव में एक एसएसवी) बनाने के लिए dbms_sql और dbms_output का उपयोग करता है। आप इसे मेरे githup भंडार पर पा सकते हैं।




मुझे पता है कि यह एक पुराना धागा है, हालांकि मैंने देखा कि किसी ने भी अंडरलाइन विकल्प का उल्लेख नहीं किया है, जो कॉलम शीर्षकों के तहत अंडरलाइन को हटा सकता है।

set pagesize 50000--50k is the max as of 12c
set linesize 10000   
set trimspool on  --remove trailing blankspaces
set underline off --remove the dashes/underlines under the col headers
set colsep ~

select * from DW_TMC_PROJECT_VW;



आपको अवगत होना चाहिए कि फ़ील्ड के मूल्यों में अल्पविराम और उद्धरण वर्ण हो सकते हैं, इसलिए कुछ सुझाए गए उत्तरों काम नहीं करेंगे, क्योंकि सीएसवी आउटपुट फ़ाइल सही नहीं होगी। किसी फ़ील्ड में उद्धरण वर्णों को प्रतिस्थापित करने के लिए, और इसे डबल कोटेशन कैरेक्टर के साथ प्रतिस्थापित करने के लिए, आप डबल कोट पर एकल कोट को बदलने के लिए, ऑरैकल प्रदान करता है, जो रेप्लेस फ़ंक्शन का उपयोग कर सकते हैं।

set echo off
set heading off
set feedback off
set linesize 1024   -- or some other value, big enough
set pagesize 50000
set verify off
set trimspool on

spool output.csv
select trim(
       '"'   || replace(col1, '"', '""') || 
       '","' || replace(col2, '"', '""') ||
       '","' || replace(coln, '"', '""') || '"' ) -- etc. for all the columns
from   yourtable
/
spool off

या, यदि आप फ़ील्ड के लिए एकल उद्धरण चरित्र चाहते हैं:

set echo off
set heading off
set feedback off
set linesize 1024   -- or some other value, big enough
set pagesize 50000
set verify off
set trimspool on

spool output.csv
select trim(
'"'   || replace(col1, '''', '''''') || 
'","' || replace(col2, '''', '''''') ||
'","' || replace(coln, '''', '''''') || '"' ) -- etc. for all the columns
from   yourtable
/
spool off



क्लाइंट टूल्स के नए संस्करणों के साथ, क्वेरी आउटपुट को प्रारूपित करने के लिए कई विकल्प हैं। शेष इसे किसी फ़ाइल में स्पूल करना या क्लाइंट टूल के आधार पर आउटपुट को फ़ाइल के रूप में सहेजना है। यहां कुछ तरीके दिए गए हैं:

  • एसक्यूएल * प्लस

एसक्यूएल * प्लस कमांड का उपयोग करके आप अपना वांछित आउटपुट प्राप्त करने के लिए प्रारूपित कर सकते हैं। आउटपुट को फ़ाइल में स्पूल करने के लिए SPOOL का उपयोग करें।

उदाहरण के लिए,

SQL> SET colsep ,
SQL> SET pagesize 20
SQL> SET trimspool ON
SQL> SET linesize 200
SQL> SELECT * FROM scott.emp;

     EMPNO,ENAME     ,JOB      ,       MGR,HIREDATE ,       SAL,      COMM,    DEPTNO
----------,----------,---------,----------,---------,----------,----------,----------
      7369,SMITH     ,CLERK    ,      7902,17-DEC-80,       800,          ,        20
      7499,ALLEN     ,SALESMAN ,      7698,20-FEB-81,      1600,       300,        30
      7521,WARD      ,SALESMAN ,      7698,22-FEB-81,      1250,       500,        30
      7566,JONES     ,MANAGER  ,      7839,02-APR-81,      2975,          ,        20
      7654,MARTIN    ,SALESMAN ,      7698,28-SEP-81,      1250,      1400,        30
      7698,BLAKE     ,MANAGER  ,      7839,01-MAY-81,      2850,          ,        30
      7782,CLARK     ,MANAGER  ,      7839,09-JUN-81,      2450,          ,        10
      7788,SCOTT     ,ANALYST  ,      7566,09-DEC-82,      3000,          ,        20
      7839,KING      ,PRESIDENT,          ,17-NOV-81,      5000,          ,        10
      7844,TURNER    ,SALESMAN ,      7698,08-SEP-81,      1500,          ,        30
      7876,ADAMS     ,CLERK    ,      7788,12-JAN-83,      1100,          ,        20
      7900,JAMES     ,CLERK    ,      7698,03-DEC-81,       950,          ,        30
      7902,FORD      ,ANALYST  ,      7566,03-DEC-81,      3000,          ,        20
      7934,MILLER    ,CLERK    ,      7782,23-JAN-82,      1300,          ,        10

14 rows selected.

SQL>
  • एसक्यूएल डेवलपर संस्करण पूर्व 4.1

वैकल्पिक रूप से, आप SQL डेवलपर में नए /*csv*/ संकेत का उपयोग कर सकते हैं।

/*csv*/

उदाहरण के लिए, मेरे एसक्यूएल डेवलपर संस्करण 3.2.20.10 में :

अब आप आउटपुट को फाइल में सहेज सकते हैं।

  • एसक्यूएल डेवलपर संस्करण 4.1

एसक्यूएल डेवलपर संस्करण 4.1 में नया, sqlplus कमांड की तरह निम्न का उपयोग करें और स्क्रिप्ट के रूप में चलाएं। क्वेरी में संकेत की कोई ज़रूरत नहीं है।

SET SQLFORMAT csv

अब आप आउटपुट को फाइल में सहेज सकते हैं।






Related