ORACLEの全てのテーブルをdescした結果一覧を吐くスクリプト

空き時間にちょこっと書いてみたのでさらしてみます。

遠隔で操作しててNWの状態があまり良くなく、何度もsqlplusでdescできないなぁという状況があったので書きました。

ただし、持ち出しNGのため、帰宅して自宅で書いてデバックしてない。もしかたらスペルミス等あるかも。

#もし間違ってたら明日直します。

#!/bin/ksh

ORACLE_USR="usr"
ORACLE_PWD="***"
ORACLE_SID="exdb"

SQL_FILE=./tmp.sql
SPOOL_FILE=./${ORACLE_USR}_${ORACLE_SID}_desc.txt

i=0
flag=0

cat /dev/null > ${SQL_FILE}
cat /dev/null > ${SPOOL_FILE}

echo "set trimspool on"           >> ${SQL_FILE}
echo "spool ${SPOOL_FILE}"        >> ${SQL_FILE}
echo "select * from tab;"         >> ${SQL_FILE}
echo "spool off"                  >> ${SQL_FILE}

sqlplus ${ORACLE_USR}/${ORACLE_PWD}@${ORACLE_SID} < ${SQL_FILE}

cat /dev/null > ${SQL_FILE}

echo "set trimspool on"           >> ${SQL_FILE}
echo "spool ${SPOOL_FILE}"        >> ${SQL_FILE}

`which awk` -v i=${i}, flag=${flag} '{
    if ( $1 ~ /^$/ ) flag += 1;
    if ( i >= 4 && flag < 2 ) print "desc " $1 ";";
    i += 1;
}' ${SPOOL_FILE} >> ${SQL_FILE}

echo "spool off"                  >> ${SQL_FILE}

cat /dev/null > ${SPOOL_FILE}

sqlplus ${ORACLE_USR}/${ORACLE_PWD}@${ORACLE_SID} < ${SQL_FILE}

rm -f ${SQL_FILE}
exit 0

つまらないものですが、もし需要があればご利用下さい。