GreenPlum儲存過程的原始碼匯出
版權所有,請勿轉載!!!!! 如要轉載請 聯絡博主 !!!!謝謝合作
#!/bin/bash
source /usr/local/greenplum-db/greenplum_path.sh
USAGE ()
{
echo "Usage: `basename $0` [-d database] [-p port] [-h hostip] [ -U username ] {-f procname} [-o output]";
echo "ExpFunToFile Parameter Infomation:";
echo " Parameter -f must be specified [必須指定函式名 例如:public.test]";
echo " Parameter -d: Database Name,Default Value:PGDATABASE [資料庫名]";
echo " Parameter -p: Database Port,Default Value:5432 [資料庫埠]";
echo " Parameter -h: Database Host,Defualt Value:PGHOST [主機IP地址]";
echo " Parameter -U: User Name,Default Value:PGUSER [連線資料庫名]";
echo " Parameter -o: Output Path,Default Value: pwd [目標目錄]";
echo ""
exit 1;
}
{
echo "Usage: `basename $0` [-d database] [-p port] [-h hostip] [ -U username ] {-f procname} [-o output]";
echo "ExpFunToFile Parameter Infomation:";
echo " Parameter -f must be specified [必須指定函式名 例如:public.test]";
echo " Parameter -d: Database Name,Default Value:PGDATABASE [資料庫名]";
echo " Parameter -p: Database Port,Default Value:5432 [資料庫埠]";
echo " Parameter -h: Database Host,Defualt Value:PGHOST [主機IP地址]";
echo " Parameter -U: User Name,Default Value:PGUSER [連線資料庫名]";
echo " Parameter -o: Output Path,Default Value: pwd [目標目錄]";
echo ""
exit 1;
}
if [ $# -lt 2 ]
then
USAGE
fi
then
USAGE
fi
dbname=""
procname=""
dbport=""
dbhost=""
outpath=""
dbuser=""
#***************************Judge Parameter Begin
while getopts :d:f:p:h:U:o: OPTION ;
do
case "$OPTION" in
d) dbname="$OPTARG" ;;
f) procname="$OPTARG" ;;
p) dbport="$OPTARG" ;;
h) dbhost="$OPTARG" ;;
o) utpath="$OPTARG" ;;
U) dbuser="$OPTARG" ;;
\?) #usage statement
USAGE;
;;
esac
done
while getopts :d:f:p:h:U:o: OPTION ;
do
case "$OPTION" in
d) dbname="$OPTARG" ;;
f) procname="$OPTARG" ;;
p) dbport="$OPTARG" ;;
h) dbhost="$OPTARG" ;;
o) utpath="$OPTARG" ;;
U) dbuser="$OPTARG" ;;
\?) #usage statement
USAGE;
;;
esac
done
if [ "$procname" = "" ]
then
echo "Parameter -f must be specified "
USAGE;
else
if [ `expr index $procname .` -le 0 ]
then
echo "The Function Name is the same as schema.funname."
echo "Eg: public.test "
exit 1
fi
fi
strdb=""
if [ "$dbname" != "" ]
then
strdb=" -d $dbname "
fi
if [ "$dbport" != "" ]
then
strdb=$strdb" -p $dbport "
fi
if [ "$dbhost" != "" ]
then
strdb=$strdb" -h $dbhost "
fi
if [ "$dbuser" != "" ]
then
strdb=$strdb" -U $dbuser "
fi
if [ "$outpath" != "" ]
then
utfile=$outpath/$procname.sql
else
utfile=$procname.sql
fi
then
echo "Parameter -f must be specified "
USAGE;
else
if [ `expr index $procname .` -le 0 ]
then
echo "The Function Name is the same as schema.funname."
echo "Eg: public.test "
exit 1
fi
fi
strdb=""
if [ "$dbname" != "" ]
then
strdb=" -d $dbname "
fi
if [ "$dbport" != "" ]
then
strdb=$strdb" -p $dbport "
fi
if [ "$dbhost" != "" ]
then
strdb=$strdb" -h $dbhost "
fi
if [ "$dbuser" != "" ]
then
strdb=$strdb" -U $dbuser "
fi
if [ "$outpath" != "" ]
then
utfile=$outpath/$procname.sql
else
utfile=$procname.sql
fi
#獲取函式名以及相關的引數
sqlstr="select nspname||'.'|| proname procname,usename,lanname,prorettype::regtype,proargtypes,proallargtypes,proargmodes,proargnames \
from pg_catalog.pg_proc a \
left join pg_catalog.pg_namespace b on a.pronamespace=b.oid \
left join pg_catalog.pg_user c on a.proowner=c.usesysid \
left join pg_catalog.pg_language d on a.prolang=d.oid \
where nspname||'.'||proname=lower('$procname');"
sqlstr="select nspname||'.'|| proname procname,usename,lanname,prorettype::regtype,proargtypes,proallargtypes,proargmodes,proargnames \
from pg_catalog.pg_proc a \
left join pg_catalog.pg_namespace b on a.pronamespace=b.oid \
left join pg_catalog.pg_user c on a.proowner=c.usesysid \
left join pg_catalog.pg_language d on a.prolang=d.oid \
where nspname||'.'||proname=lower('$procname');"
#取出返回值
line=`psql -X -t -c "$sqlstr" -A -F#@# $strdb `
#echo $line,$strdb,$sqlstr
#分解返回值
vusername=`echo $line|awk -F#@# '{print $2}'`
vlanname=`echo $line|awk -F#@# '{print $3}'`
vretvalue=`echo $line|awk -F#@# '{print $4}'`
vargtypes=`echo $line|awk -F#@# '{print $5}'|sed 's/[{}]//g'`
vallargtypes=`echo $line|awk -F#@# '{print $6}'|sed 's/[{}]//g'`
vargmodes=`echo $line|awk -F#@# '{print $7}'|sed 's/[{}]//g'`
vargnames=`echo $line|awk -F#@# '{print $8}'|sed 's/[{}]//g'`
vfuntxt=`echo $line|awk -F#@# '{print $9}'`
line=`psql -X -t -c "$sqlstr" -A -F#@# $strdb `
#echo $line,$strdb,$sqlstr
#分解返回值
vusername=`echo $line|awk -F#@# '{print $2}'`
vlanname=`echo $line|awk -F#@# '{print $3}'`
vretvalue=`echo $line|awk -F#@# '{print $4}'`
vargtypes=`echo $line|awk -F#@# '{print $5}'|sed 's/[{}]//g'`
vallargtypes=`echo $line|awk -F#@# '{print $6}'|sed 's/[{}]//g'`
vargmodes=`echo $line|awk -F#@# '{print $7}'|sed 's/[{}]//g'`
vargnames=`echo $line|awk -F#@# '{print $8}'|sed 's/[{}]//g'`
vfuntxt=`echo $line|awk -F#@# '{print $9}'`
#判斷引數個數
fnum=`echo $vargnames|awk -F, '{print NF}'`
fnum=`echo $vargnames|awk -F, '{print NF}'`
#echo $strarg
#重組函式的引數串
for((i=1;i<=$fnum;i++))
do
typeid=`echo $vargtypes|cut -d' ' -f$i`
atypeid=`echo $vallargtypes|cut -d, -f$i`
amodes=`echo $vargmodes|cut -d, -f$i`
argnames=`echo $vargnames|cut -d, -f$i`
echo $typeid
if [ "$atypeid" = "" ]
then
atypeid=$typeid
fi
atype=`psql -X -t -c "select $atypeid::regtype" $strdb `
if [ "$amodes" != "o" ]
then
strarg="${strarg},in $argnames $atype"
else
strarg="${strarg},out $argnames $atype"
fi
done
vstrarg=`echo $strarg|cut -c 2-`
#重組函式的引數串
for((i=1;i<=$fnum;i++))
do
typeid=`echo $vargtypes|cut -d' ' -f$i`
atypeid=`echo $vallargtypes|cut -d, -f$i`
amodes=`echo $vargmodes|cut -d, -f$i`
argnames=`echo $vargnames|cut -d, -f$i`
echo $typeid
if [ "$atypeid" = "" ]
then
atypeid=$typeid
fi
atype=`psql -X -t -c "select $atypeid::regtype" $strdb `
if [ "$amodes" != "o" ]
then
strarg="${strarg},in $argnames $atype"
else
strarg="${strarg},out $argnames $atype"
fi
done
vstrarg=`echo $strarg|cut -c 2-`
#獲取函式體
sqlstr=" select prosrc from pg_catalog.pg_proc a \
left join pg_catalog.pg_namespace b on a.pronamespace=b.oid \
where nspname||'.'||proname=lower('$procname'); "
sqlstr=" select prosrc from pg_catalog.pg_proc a \
left join pg_catalog.pg_namespace b on a.pronamespace=b.oid \
where nspname||'.'||proname=lower('$procname'); "
#生成檔案
echo "CREATE OR REPLACE FUNCTION ${procname}($vstrarg)" >$outfile.sql
echo "RETURNS $vretvalue AS " >>$outfile.sql
echo "\$BODY\$" >>$outfile.sql
psql -X -t -c "$sqlstr" $strdb >>$outfile.sql
echo "\$BODY\$" >>$outfile.sql
echo "LANGUAGE $vlanname VOLATILE;" >>$outfile.sql
echo "CREATE OR REPLACE FUNCTION ${procname}($vstrarg)" >$outfile.sql
echo "RETURNS $vretvalue AS " >>$outfile.sql
echo "\$BODY\$" >>$outfile.sql
psql -X -t -c "$sqlstr" $strdb >>$outfile.sql
echo "\$BODY\$" >>$outfile.sql
echo "LANGUAGE $vlanname VOLATILE;" >>$outfile.sql
#程式結束
exit 0
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/177006/viewspace-719411/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL儲存過程的匯出說明MySql儲存過程
- 匯出系統表中的儲存過程和函式儲存過程函式
- mysql 匯入匯出資料庫以及函式、儲存過程的介紹MySql資料庫函式儲存過程
- Dubbo原始碼解析之服務匯出過程原始碼
- oracle使用儲存過程將表資料以excel格式匯出Oracle儲存過程Excel
- oracle父儲存過程呼叫子儲存過程procedure與輸出引數Oracle儲存過程
- 從sybase的儲存過程轉向oracle的儲存過程儲存過程Oracle
- MySQL儲存過程詳解 mysql 儲存過程MySql儲存過程
- 帶輸出引數的儲存過程儲存過程
- mysqldump匯入儲存過程和其註釋MySql儲存過程
- 儲存過程儲存過程
- Greenplum儲存過程使用分割槽表將進行全表掃描儲存過程
- 在儲存過程A中呼叫儲存過程B的結果儲存過程
- 【PG】ora2pg 分別匯出表,索引,儲存過程等索引儲存過程
- oracle的儲存過程Oracle儲存過程
- 修改的儲存過程儲存過程
- mysql的儲存過程MySql儲存過程
- 我的測試儲存過程程式碼儲存過程
- MySql儲存過程—2、第一個MySql儲存過程的建立MySql儲存過程
- 儲存過程呼叫其他模式的儲存過程需要注意的地方儲存過程模式
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- MySQL儲存過程詳解 mysql 儲存過程linkMySql儲存過程
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- oracle中取得儲存過程、函式等pl sql原始碼的方法Oracle儲存過程函式SQL原始碼
- Mysql 的儲存過程和儲存函式MySql儲存過程儲存函式
- 儲存過程批量生成awr指令碼儲存過程指令碼
- JDBC 呼叫儲存過程程式碼示例JDBC儲存過程
- oracle儲存過程分頁程式碼Oracle儲存過程
- 儲存過程與儲存函式儲存過程儲存函式
- Oracle儲存過程Oracle儲存過程
- 使用儲存過程儲存過程
- sybase儲存過程儲存過程
- java儲存過程Java儲存過程
- 管理儲存過程儲存過程
- 呼叫儲存過程儲存過程
- mysql 儲存過程MySql儲存過程
- SQLSERVER儲存過程SQLServer儲存過程
- 利用mysqldump只匯出資料庫的表結構、儲存過程和函式MySql資料庫儲存過程函式