월말 보고서를 자동으로 생성하는 스크립트를 작성해야 합니다.
빌드 프로세스에는 데이터베이스에 테이블을 만든 다음 동일한 스크립트에서 해당 테이블에 액세스하여 다른 임시 테이블을 만드는 작업이 포함됩니다.
기본 테이블을 동적으로 생성했지만 이전 동적 테이블을 참조로 사용하여 다른 임시 테이블을 생성하는 데 문제가 있습니다.
표 1: (Create 문은 sql 파일에 있음)
Create table XYZ as
(
Select * from abc
);
참고: 테이블 abc가 시스템에 이미 존재합니다. 따라서 XYZ 테이블을 만드는 것은 큰 문제가 아닙니다.
표 2: (SQL 파일에 문 만들기)
Create table JKL as
(
Select distinct list from XYZ
);
이제 JKL을 생성할 때 XYZ 테이블에 액세스하는 방법을 찾을 수 없습니다. 변수에 테이블 이름 XYZ를 할당하려고 생각했지만 다른 테이블을 참조로 사용하여 생성할 테이블이 많기 때문에 각 테이블 이름에 대해 별도의 변수를 생성하는 것은 유효한 아이디어가 아니라고 생각합니다.
다음은 테이블 1을 생성하는 쉘 스크립트입니다.
#!/bin/ksh
#Read the file file_table_map.sql to fetch the sql file name and corresponding table name
#file where the info related to create statement, prefix of table name and DB is stored.
file_table_lst_map=`echo ${abhi_SRC}/file_table_map.lst`
date_prev=`date --d 'last month' +%b"_"%Y`
RunSQLCMD()
{
echo "Code came here"
echo $file_name
echo $table_name
echo $db_name
sqlplus -s <username>/<password>@${db_name} <<EOF
@$file_name $table_name
EOF
if [ $? -ne 0 ]
then
echo "Failed to execute ${file_name}"
return 1
fi
echo "Success in executing sqlcmd for ${file_name}"
return 0
}
cat $file_table_lst_map|while read r
do
file_name=`echo $r|awk '{print $1}'`
tab_name=`echo $r|awk '{print $2}'`
#prepare the table name to be created
table_name=$tab_name"_"$date_prev
db_name=`echo $r| awk '{print$3}'`
echo "========================================"
#RunSQLCMD "${file_name}" "${table_name}" "${db_name}"
#echo $date_prev
echo " File to be executed - " $file_name "/" "table created - " $table_name "/" "db_name - "$db_name
done
#echo $table_name
"file_table_map.lst" 파일의 형식은 다음과 같습니다.
<SQL file path and name> <table name prefix> <DB>
abc.sql abc DB_Z
테이블 1을 생성하는 SQL 명령은 다음과 같습니다.
CREATE TABLE &1 AS
(
SELECT to_char(add_months(SYSDATE,-1),'MON_yyyy') as dat FROM DUAL
);
&1은(는) 테이블 이름 abc_jan_2018입니다.
create table &1 AS
(
SELECT * FROM &2
)
그 중 &1은 테이블 이름 JKL_jan_2018이고, &2는 abc_jan_2018입니다.
이 기능을 활성화하기 위해 스크립트를 어떻게 향상시킬 수 있습니까?