代码:

[oracle@oracle-db ~]$ cat after_format
table_name="v\$parameter"
result=`sqlplus -s / as sysdba<

注意:
1、 这里,按照上面的SQL*Plus的方式,输出的结果集首行为空白行,所以,如果要计算column_id的值,做sed的时候,是从2行开始为列名行的,而不是通常的1行。
2、 上面最后一段代码“echo "$result" | awk '{print $id}' id="4"”中,如果,echo后的变量$result,没有用双引号括起来,那么将出现变量返回的格式紊乱的问题。

计算Column ID:

col_id=`cat table_data | sed -n '1p' | awk -F " " '{for(i=1;i<=NF;i++) printf("%s-%s\n",i,$i)}' | grep $col_name | cut -d'-' -f1`

Eg:
数据:

[root@oracle-db script-lab]# cat table_data 
       NUM NAME          TYPE VALUE                                                          ISDEFAU ISSES_M ISSYS_M ISINSTA ISMODIF ISADJUS ISDEPRE DESCRIPTION
---------- ------- ---------- -------------------------------------------------------------- ------- ------- ------- ------- ------- ------- ------- ----------------------
       128 spfile           2 /u01/app/oracle/product/10.0.2/dbhome_1/dbs/spfileedendb1.ora  TRUE    FALSE   FALSE   FALSE   FALSE   FALSE   FALSE   server parameter file
[root@oracle-db script-lab]# 
[root@oracle-db script-lab]# 

代码与执行:

[root@oracle-db script-lab]# cat analyze_table_data 
# Script: analyze_table_data

#variable
col_name=$1

#relative variable
col_id=`cat table_data | sed -n '1p' | awk -F " " '{for(i=1;i<=NF;i++) printf("%s-%s\n",i,$i)}' | grep $col_name | cut -d'-' -f1`

echo "@@@ col number is: $col_id"
echo ""

result=`awk '{print $id }' id="$col_id" table_data | sed -n '3p'`

echo "@@@ result is: $result"
[root@oracle-db script-lab]# 
[root@oracle-db script-lab]# sh analyze_table_data VALUE
@@@ col number is: 4

@@@ result is: /u01/app/oracle/product/10.0.2/dbhome_1/dbs/spfileedendb1.ora
[root@oracle-db script-lab]# 

——————————————————
Done。

2
说点什么

avatar
2 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
0 Comment authors
Recent comment authors

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

  Subscribe  
提醒
trackback

[…] Shell脚本:访问Oracle数据库,并提取特定的列数据到变量 […]

trackback

[…] Shell脚本:访问Oracle数据库,并提取特定的列数据到变量 […]