table_name_bad_U_$RUN_DATE.dat与
SELECT BYTES FROM USER_SEGMENTS WHERE SEGMENT_NAME = 'table_name_bad';
SELECT NUM_ROWS FROM USER_TABLES WHERE TABLE_NAME = 'table_name_bad';
及$RUN_DATE
如何将上面查询语句结果集拼接为复合的SELECT语句并将结果用空格隔开?
用spool命令生成.verf文件
可以这样写shell脚本:
shell
#!/bin/bash
RUN_DATE=`date +%Y%m%d`
spool table_name_bad_U_$RUN_DATE.verf
echo "SELECT BYTES FROM USER_SEGMENTS WHERE SEGMENT_NAME = 'table_name_bad'"
echo "SELECT NUM_ROWS FROM USER_TABLES WHERE TABLE_NAME = 'table_name_bad'"
echo $RUN_DATE
unspool
cat <<EOF > table_name_bad_U_$RUN_DATE.verf
SELECT
BYTES,
NUM_ROWS,
'$RUN_DATE'
FROM
(SELECT BYTES FROM USER_SEGMENTS WHERE SEGMENT_NAME = 'table_name_bad') a,
(SELECT NUM_ROWS FROM USER_TABLES WHERE TABLE_NAME = 'table_name_bad') b
EOF
这个脚本会:
1. 获取当前日期保存到RUN_DATE变量
2. 使用spool开始输出到table_name_bad_U_$RUN_DATE.verf文件
3. 输出两条SELECT语句
4. 输出RUN_DATE变量的值
5. 使用unspool停止输出到文件
6. 使用cat将三条结果拼接为一条复合的SELECT语句,并使用空格隔开,输出到文件
所以最终table_name_bad_U_$RUN_DATE.verf文件中会包含:
sql
SELECT
BYTES,
NUM_ROWS,
'20210415'
FROM
(SELECT BYTES FROM USER_SEGMENTS WHERE SEGMENT_NAME = 'table_name_bad') a,
(SELECT NUM_ROWS FROM USER_TABLES WHERE TABLE_NAME = 'table_name_bad') b
这样就完成了要求,使用spool生成了.verf文件,并将查询结果拼接为一条复合的SELECT语句。