Find Source For PL/SQL

#!/bin/sh
#Program Name: Get_Code
#Author: Tangjun Chen {RHCE,OCP}
#Country: China
#Alias:  Majesty
#Version: 1.2_2012-08-04
#Description: It is base on linux built-in function/program
#             like grep,head,and so on. Processing batch using while
#             all the codes stored in directory /tmp/all_codes.

####make sure you login by oracle
if [ $USER == oracle  ]; then echo "login by oracle, continue......"
else echo "Please login by oracle."; exit; fi

####make sure input the schema.
if [ "$1" == ''  ]; then
echo "Please input a schema like 'hr' ";exit;fi

####First subprogram get all the relative schema's program name.
sub_program_name(){
sqlplus / as sysdba<<EOF > /tmp/tmp.txt
set heading off
set feedback off
select distinct name from dba_source
where owner=upper('$1');
EOF
#@@@Filter begin
grep -v ^$   /tmp/tmp.txt                  > /tmp/tmp01.txt
head -n -2   /tmp/tmp01.txt                > /tmp/tmp02.txt
head -n 6    /tmp/tmp02.txt                > /tmp/tmp03.txt
grep -vf     /tmp/tmp03.txt /tmp/tmp02.txt > /tmp/tmp04.txt
grep -v ^SQL /tmp/tmp04.txt                > /tmp/program_name.txt
rm -rf /tmp/tmp01.txt /tmp/tmp02.txt
rm -rf /tmp/tmp03.txt /tmp/tmp04.txt /tmp/tmp.txt
}    

####Second program get code to a assigned directory.
sub_get_code(){
#$1 is owner
#$2 is name of program
sqlplus / as sysdba<<FIRST_SQL > /tmp/tmp.txt
set heading off
set feedback off
SELECT text FROM dba_source
WHERE owner=upper('$1')
  AND name=upper('$2');
FIRST_SQL
#@@@Filter begin, all the program was named by the program name add ".sql"
mkdir -p /tmp/all_codes                   
grep -v ^$   /tmp/tmp.txt                  > /tmp/tmp01.txt
head -n -2   /tmp/tmp01.txt                > /tmp/tmp02.txt
head -n 6    /tmp/tmp02.txt                > /tmp/tmp03.txt
grep -vf     /tmp/tmp03.txt /tmp/tmp02.txt > /tmp/tmp04.txt
grep -v ^SQL /tmp/tmp04.txt                > /tmp/all_codes/$2.sql
rm -rf /tmp/tmp01.txt /tmp/tmp02.txt
rm -rf /tmp/tmp03.txt /tmp/tmp04.txt /tmp/tmp.txt
}

####Main program begin
sub_program_name  $1

####Processing batch all lines of the text, respectively.
while read line
do
 sub_get_code $1 $line
done < /tmp/program_name.txt

####change directory
mkdir -p /home/oracle/$1_plsql
rm -rf /home/oracle/$1_plsql  
cp -rp /tmp/all_codes /home/oracle/$1_plsql
rm -rf /tmp/all_codes/*

####category
#package
cd /home/oracle/$1_plsql
mkdir -p /home/oracle/$1_plsql/package_dir
package=`grep -i PACKAGE * | awk -F':' {'print $1'}`
while read input
do
  mv  $input package_dir/  > /dev/null 2>&1
done <<EOF
$package
EOF

#procedure
cd /home/oracle/$1_plsql
mkdir -p /home/oracle/$1_plsql/procedure_dir
proc=`grep -i PROCEDURE * | awk -F':' {'print $1'}`
while read input
do
  mv  $input procedure_dir/  > /dev/null 2>&1
done <<EOF
$proc
EOF

#function
cd /home/oracle/$1_plsql
mkdir -p /home/oracle/$1_plsql/function_dir
func=`grep -i FUNCTION * | awk -F':' {'print $1'}`
while read input
do
  mv $input function_dir/  > /dev/null 2>&1
done <<EOF
$func
EOF

#trigger
cd /home/oracle/$1_plsql
mkdir -p /home/oracle/$1_plsql/trigger_dir
trigger=`grep -i TRIGGER * | awk -F':' {'print $1'}`
while read input
do
  mv $input trigger_dir/  > /dev/null 2>&1
done <<EOF
$trigger
EOF






 

你可能感兴趣的:(shell,plsql,dba_source)