0
내 스크립트가 일부 쿼리의 출력을 텍스트 파일로 스풀링하고 있습니다. 질의 1의 모든 행에 출력을위한 내가 원하는SQLPlus 후행 공백 문제
set linesize 200
set trimspool on
....
spool "C:\someFile.txt"
SELECT rpad(field1, 50)||rpad(field2, 50) FROM table1;
SELECT rpad(field3, 200) FROM table2;
spool off
은 후행 공백 포함 100 자, 그리고 쿼리 2의 모든 행에 출력을위한 마지막 공백 포함 200 자합니다.
trimspool
이 꺼져있는 경우 모든 줄에 200 자까지 표시됩니다. 원하는 줄이 아닙니다. 이 옵션이 켜져있는 경우 field3의 길이가 10자인 경우 출력 파일에서 해당 행의 길이는 60 자 (100 자 여야합니다)입니다. 파일은 외부 서버로 보내지고 길이가 고정되어 있다는 가정하에 파싱되기 때문에 각 줄은 고정 길이 여야합니다.
내가 명시 적으로 출력하는 공백을 자르는 것을 피할 방법이 있습니까?
감사합니다. 나는 그런 식으로'set'을 사용할 수 있다는 것을 몰랐습니다. 거기에 한 가지 상황이 나를 위해 작동하지 않습니다 :'SELECT case When WHERE field1 = 1 THP rpad (field2, 50) ELSE rpad (field3, 200) END FROM table1'. 해당 쿼리에 사용할 수있는 항목이 있는지, 50 줄 또는 200 줄과 항상 200 줄이 아닌지 알 수 있습니까? – DiscoInfiltrator
하나의 레코드에서 다음 레코드로 너비를 바꿀 수있는 방법이 없습니다. 기본적인 문제는'SELECT'는 오라클 명령이고'SET LINESIZE'는 SQL * Plus 명령입니다. "SELECT"가 "Oracle world"에서 진행되는 동안 "SQL * Plus"세계에 도달하여 회선 크기를 전환 할 수 없습니다. 트리밍 된 행이나 길이 100의 세트 하나와 길이 200의 세트 하나를 가지고 살 수 없다면, 이후에 파일을 망칠 지 또는'UTL_File'을 사용하는 저장 프로 시저를 작성하는 것과 같은 새로운 접근 방식이 필요합니다. 라이브러리 또는 C/Java/C#/PHP/쿼리 및 쓰는 프로그램. –
그래, 그게 내가 생각했던거야. 묻는 데 해가되지 않습니다. – DiscoInfiltrator