PUTTY에서 SHELL 스크립트를 사용하여 SQL 쿼리를 실행하고 상단에 헤더와 메시지 행이 있는 이메일 본문의 테이블 형식으로 결과를 보내야 합니다. 지금까지 이것을 작성했지만 결과를 표 형식으로 얻을 수 없습니다.
#! /bin/ksh
sqlplus -s user/pass @sid > /dev/null << EOF
whenever sqlerror exit 4;
set newpage 0
set space 0
set feedback off
set head off
set echo off
set pagesize 0
set serverout on
set trimspool on
set linesize 3000
spool $CSVFILE
select * from table;
spool off;
exit 0;
EOF
mailx -s "Subject Line" [email protected] < $CSVFILE
exit 0
SQL은 정상적으로 실행되고 데이터는 CSVFILE에 저장됩니다. 내가 원하는 결과는 표 형식으로 이메일 본문에 있는 이메일 주소로 전송되어야 하며 표 위에 다음과 같은 메시지 행도 포함되어야 합니다. 대략적인 형식의 이메일 예
오류가 없습니다. 그러나 SET HEAD ON 후에도 CSVFILE에는 헤더가 없습니다. 또한 "mail -a(content-type)" 솔루션을 시도했지만 "-a"를 사용하면 오류가 발생합니다.
답변1
쉘은 좋은 도구가 아닙니다.
더 나은 해결책은 데이터를 파일로 덤프한 다음 파일을 사용하거나 다시 포맷하는 것 awk
입니다 .perl
python
더 나은 방법은 전체 내용을 데이터베이스에 작성 perl
하거나 python
데이터베이스에 연결하고, SQL 문을 실행하고, 데이터를 다운로드하고 형식을 지정하는 것입니다.
또 다른 방법은 온라인에서 도구를 찾거나 작성하는 것입니다 export2csv
(github에는 여러 버전이 있습니다). 귀하의 환경에서 작동하는 것을 찾으십시오. 일반적으로 SQL 문과 출력 파일을 정의하는 간단한 방법이 있습니다.
데이터베이스에 대한 ODBC 연결이 있고( unixODBC
잘 작동함) C++ 코드를 컴파일할 수 있는 경우 광산을 시도해 볼 수 있습니다 nisql
.https://github.com/White-Owl/nisql
답변2
sqlplus
문제는 설정 방식에 있습니다. 예를 들어 컬렉션을 추가합니다.
set lines 256
set trimout on
set tab off
다음과 같이 테이블을 인쇄합니다.
Name | Address | Phone |
-------+---------------+-------------+
name1 | address1 | phone1 |
name2 | address2 | phone2 |
name3 | address3 | phone3 |
그런 다음 마지막 명령은 보기 좋은 형식의 이메일을 보냅니다.
테이블 앞에 행을 추가하려면 다음을 사용할 수 있습니다 prompt
.
prompt Hi,
prompt Please check results below:
prompt
아시다시피 이러한 명령은 select
테이블 생성보다 먼저 수행되어야 합니다.