免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1986 | 回复: 3
打印 上一主题 下一主题

[文本处理] 如何处理空的字符串 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-05-30 12:54 |只看该作者 |倒序浏览
下面是一段代码,在程序后面输入一个db实例名,和一个表空间名就可以得出表空间的相关信息
如果表空间是ALL,则代表是所有表空间

ts_usage.sh

#!/bin/ksh


if [ $2 = "ALL" ];then
  TS_STR=''
else
  shift
  TS=$(echo "$@"  | $AWK -v OFS="," '{for(i=1;i<=NF;i++)$i="\047"$i"\047"}1')
  TS_STR=" AND d.tablespace_name in ($TS) "
fi


sqlplus -s '/ as sysdba' <<- !
SELECT d.contents,
       d.tablespace_name,
       TO_CHAR(a.curr_bytes / 1024 / 1024, '999,999,990') SIZE_MB,
       TO_CHAR((a.curr_bytes - NVL(f.bytes, 0)) / 1024 / 1024,
               '999,999,990') USED_MB,
       TO_CHAR(NVL(f.bytes, 0) / 1024 / 1024, '999,999,990') FREE_MB,
       TO_CHAR((a.curr_bytes - NVL(f.bytes, 0)) / a.curr_bytes * 100,
               '990.00') || ' %' USED_PCT,
       TO_CHAR(a.max_bytes / 1024 / 1024, '999,999,990') MAX_SIZE_MB,
       LPAD(TO_CHAR((a.curr_bytes - NVL(f.bytes, 0)) / a.max_bytes * 100,
               '990.00') || ' %',12) USED_MAX_PCT,
       DECODE(a.autoextensible, 0, 'NO', 'YES') AUTOEXT
  FROM dba_tablespaces d, (SELECT tablespace_name,
                                  SUM(GREATEST(maxbytes, bytes)) max_bytes,
                                  SUM(bytes) curr_bytes,
                                  SUM(DECODE(autoextensible, 'YES', 1, 0)) autoextensible
                             FROM dba_data_files
                                GROUP BY tablespace_name
                           UNION ALL
                           SELECT tablespace_name,
                                  SUM(GREATEST(maxbytes, bytes)) max_bytes,
                                  SUM(bytes) curr_bytes,
                                  SUM(DECODE(autoextensible, 'YES', 1, 0)) autoextensible
                             FROM dba_temp_files
                            GROUP BY tablespace_name) a, (SELECT tablespace_name,
                                                                 SUM(bytes) bytes
                                                            FROM dba_free_space
                                                           GROUP BY tablespace_name) f
WHERE d.tablespace_name = a.tablespace_name
       $TS_STR   
       AND d.tablespace_name = f.tablespace_name(+)
ORDER BY d.contents, d.tablespace_name;
!


论坛徽章:
0
2 [报告]
发表于 2014-05-30 12:55 |只看该作者
如果指定单个表空间
> ./ts_usage.sh db1 SYSTEM
会得到正确的信息

但如果输入 ./ts_usage.sh db1 ALL 则得不到所有表空间的信息.
if [ $2 = "ALL" ];then 如何处理 $TS_STR

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2014-05-30 15:13 |只看该作者
没详细看你的sql...
如果为空不方便拼接sql的话,你可以
TS_STR="AND 1=1"

论坛徽章:
0
4 [报告]
发表于 2014-05-30 17:46 |只看该作者
To 非凡公子, 你的方法可以,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP