======================shell==============================
1、检测shell中调用存储过程的返回值的方法
sql_str=`sqlplus -S ${USER}/${PASSWORD}@${INS} << eof
var RETMSG NUMBER;
set pagesize 0 feedback off verify off heading off
execute $CUST_PARA('$Run_Date',:RETMSG);
print $RETMSG;
exit
eof`
sql_str=`echo $sql_str`
if [ "$sql_str" = "0" ];then
exit 0
else
exit 1
fi
2、ls -R 列出所有文件夹及子文件夹中内容
3、lcd:在ftp模式中更换本地目录
4、在ftp传输时注意用bin语句将传输模式改为二进制以适应其他系统
5、tail -f 自动更新显示文件末尾,在将结果输入log同时需要观测执行情况时有用
6、某个定时执行脚本
1.当前系统时间的取数语句:
curTime=$(date "+%H%M%S")
curDate=$(date "+%Y%m%d")
2.Shell 中的算术运算参考
http://blog.csdn.net/taijianyu/article/details/6907288
在做简单的运算时采用let语句
3.定时脚本的配置案例:
#每日运行时间(24小时制)
RUN_BEGIN_TIME=12:00:00
RUN_BEGIN_HOUR=`echo $RUN_BEGIN_TIME | awk -F: '{print $1}'`
RUN_BEGIN_MINUTE=`echo $RUN_BEGIN_TIME | awk -F: '{print $2}'`
RUN_BEGIN_SECOND=`echo $RUN_BEGIN_TIME | awk -F: '{print $3}'`
HOUR=$(date "+%H")
MINUTE=$(date "+%M")
SECOND=$(date "+%S")
let NOW_TOTAL=HOUR*3600+MINUTE*60+SECOND
let NEXT_RUN=NEXT_RUN=86400+RUN_BEGIN_HOUR*3600+RUN_BEGIN_MINUTE*60+RUN_BEGIN_SECOND
let WAIT_TIME=NEXT_RUN-NOW_TOTAL
echo "slp $WAIT_TIME"
sleep $WAIT_TIME
=======================oracle================================
1、系统视图查看表空间
查看表空间大小:使用系统视图dba_data_files
SELECT tablespace_name,
file_id,
file_name,
round(bytes / (1024 * 1024), 0) total_space
FROM dba_data_files
ORDER BY tablespace_name;
2、分号的重要性
批量执行的sql文件需最后的分号: 编译器通过分号来确定执行
3、db_link的建立
create database link ZF
connect to CNAPS
using '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.16.8.24)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ods) ) )';
--using内部语句与tns配置中相同格式
4、历史拉链表与更新
历史拉链表的设计
1.采集当日全量数据存储到 ND(当日) 表中。
2.可从历史表中取出昨日全量数据存储到 OD(上日数据)表中。
3.用ND-OD为当日新增和变化的数据(即日增量数据)。
两个表进行全字段比较,将结果记录到tabel_I表中
4.用OD-ND为状态到此结束需要封链的数据。 (需要修改END_DATE)
两个表进行全字段比较,将结果记录到tabel_U表中
5.历史表(HIS)比ND表和OD表多两个字段(START_DATE,END_DATE)
6.将tabel_I表的内容全部insert插入到HIS表中。START_DATE='当日',END_DATE可设为'9999-12-31'
7.更新封链记录的END_DATE
历史表(HIS)和tabel_U表比较,START_DATE,END_DATE除外,以tabel_U表为准,两者交集将其END_DATE改成当日,说明该记录失效。
8。取数据时对日期进行条件选择即可,如:取20100101日的数据为
(where START_DATE<='20100101' and END_DATE>'20100101' )
多表关联的更新方式:
多表关联,并把一个表的字段值更新到另一个表中的字段去:
update 表a set a.字段1 = (select b.字段1 from 表b where a.字段2=b.字段2)
where exists(select 1 from 表b where a.字段2=b.字段2)