pl/sql 블록을 실행하는 쉘 스크립트가 있고 출력 파일에 출력을 인쇄하지만 이전 정보를 유지하지 않으며 스크립트가 실행된 시간과 날짜도 표시하지 않습니다.
내 스크립트는 다음과 같습니다.
#!/bin/bash
sqlplus -s $DATABASE > output << EOSQL
SET FEEDBACK ON
declare
veventSource varchar2(20);
verrorcode integer;
verrorMessage varchar2(255);
begin
for rec in (select substr(customer,3) as pid, substr(account_num,1,2) as
countrycode from account
where substr(account_num,1,2) = substr(account_num,3,2)
and customernot in (select customer from custsource) )
loop
veventSource := rec.countrycode||'_'||rec.pid;
IPGDDL.LINKTOAC(rec.countrycode,rec.LID,veventSource,
'01-JAN-1971',null,'F',null,null,null,null,null,verrorcode,verrorMessage);
dbms_output.put_line(verrorcode);
dbms_output.put_line(verrorMessage);
commit;
end loop;
end;
/
EXIT
EOSQL
스크립트를 실행한 후 로그 파일이 있는데 PL/SQL Procedure completed successfully
.
이 스크립트를 사용하여 cron 작업이 실행된 날짜와 시간이 포함된 디렉토리의 output.txt 파일에 SQL 출력을 인쇄하고 모든 이전 데이터를 로그에 유지하고 싶습니다.
이 문제를 해결하는 데 도움을 줄 수 있는 사람이 있나요?
답변1
sqlplus
스크립트의 출력을 인쇄 하려면 다음을 사용할 수 있습니다.
set serveroutput on
DBMS_OUTPUT.PUT_LINE
SQL*Plus의 저장 프로시저 또는 PL/SQL 블록의 출력을 표시할지 여부를 제어합니다(예:
출력이 있어야 합니다.추가의리디렉션 연산자를 사용할 output.txt
수 있습니다 .>>
sqlplus -s $DATABASE >>output.txt << EOSQL
...
연산자는 >
파일의 오른쪽(존재하는 경우)을 0 크기로 자릅니다.
인용하다:배쉬 참조 매뉴얼(Bash가 #!/bin/bash
스크립트 기반 shebang이라고 가정).
cron 작업의 실행 날짜와 시간을 포함하려면 다음을 추가하면 됩니다.
date >>output.txt
를 호출하기 전에 스크립트에 추가하세요 sqlplus
.
사용 가능한 날짜 형식 옵션에 대해 알아보려면 시스템에 설치된 명령(예:)에 대한 설명서를 참조하세요 .date
man date
또는 -s
옵션을 제거할 수 있습니다 sqlplus
. 해당 출력에는 타임스탬프가 포함되어 실행 날짜/시간을 기록하기 위해 추가 명령을 사용할 필요가 없습니다(그러나 잠재적으로 원치 않는 여러 메시지도 포함됩니다).