2017-11-01 6 views
0

Oracle 버전을 스풀링을 사용하여 만든보기 구조 파일 : 12C SQL 개발자 : 4.1.1.19SQLPLUS -

내가 시작으로 다음과 같은 질문의 코드를 사용하고 있습니다 : SQLPlus - spooling to multiple files from PL/SQL blocks

내가 만들려면 프로세스가 :

  1. 내보내기 스풀링으로 하나의 파일에 다음의 결과 (약 110 행) :

    각 'DESC'선에 대한3210
    SPOOL c:\temp\view_test.csv 
    
    select 'desc '||view_name||';'FROM SYS.ALL_VIEWS WHERE OWNER = 'AN_OWNER_NAME' and substr(VIEW_NAME,1,2)='SN'; 
    
    SPOOL OFF 
    
  2. 의 'DESC'의 결과를 CSV 파일을 생성

    desc SPECIFIC_VIEW_NAME; 
    
  3. 결과는 각 뷰 각 CSV에서 같을 것 (110) 여기

    Name     Null  Type 
    ---------------------- -------- -------------- 
    ID      NOT NULL NUMBER(19) 
    SYS_ID     NOT NULL VARCHAR2(1000) 
    ACTIVE       VARCHAR2(1000) 
    APRM_ID       VARCHAR2(1000) 
    APRM_KEY      VARCHAR2(1000) 
    BUSINESS_ONLY     VARCHAR2(1000) 
    

코드 토륨 내가 현재 사용하고 있습니다. 이 코드를 실행하면 나는 dynamic_filename에 대한 값을 입력하라는 메시지가 있어요 : 나는 사무실 주위에 물어 누군가가 내가 사용하는 제안

set pagesize 0 
set trimspool on 
set headsep off 
set feedback off 
set echo off 
set verify off 
set timing off 
set linesize 4000 

DEFINE rows_per_file = 50 


-- Create an sql file that will create the individual result files 
SET DEFINE OFF 

SPOOL c:\temp\generate_one.sql 

PROMPT COLUMN which_dynamic NEW_VALUE dynamic_filename 
PROMPT 

PROMPT SELECT 'c:\temp\run_#'||TO_CHAR(&1, 'fm000')||'_result.txt' which_dynamic FROM dual 
PROMPT/

PROMPT SPOOL &dynamic_filename 

PROMPT SELECT * 
PROMPT FROM (SELECT a.*, rownum rnum 
PROMPT   FROM (select 'desc '||view_name||';'FROM SYS.ALL_VIEWS WHERE OWNER = 'AN_OWNER_NAME' and substr(VIEW_NAME,1,2)='SN') a 
PROMPT   WHERE rownum <= (&2 * 50)) 
PROMPT WHERE rnum >= ((&3 - 1) * 50) + 1 
PROMPT/

PROMPT SPOOL OFF 

SPOOL OFF 

SET DEFINE & 


-- Define variable to hold number of rows 
-- returned by the query 
COLUMN num_rows NEW_VALUE v_num_rows 

-- Find out how many rows there are to be 
SELECT COUNT(*) num_rows 
    FROM (SELECT LEVEL num_files FROM dual CONNECT BY LEVEL <= 120); 


-- Create a master file with the correct number of sql files 
SPOOL c:\temp\run_all.sql 

SELECT '@c:\temp\generate_one.sql '||TO_CHAR(num_files) 
            ||' '||TO_CHAR(num_files) 
            ||' '||TO_CHAR(num_files) file_name 
    FROM (SELECT LEVEL num_files 
      FROM dual 
     CONNECT BY LEVEL <= CEIL(&v_num_rows/&rows_per_file)) 
/

SPOOL OFF 

-- Now run them all 
@c:\temp\run_all.sql 

답변

0

:

select TABLE_NAME,COLUMN_NAME, DATA_TYPE from SYS.ALL_TAB_COLS 

을 그리고 내가 필요한 걸 얻었다.