Oracle经验技巧集(三)
上一篇 /
下一篇 2010-06-24 11:00:46
/ 个人分类:ORACLE
(t~0t3xGv010.在数据库触发器中使用列的新值与旧值
5i{s0QKi#C|V0---- 在数据库触发器中几乎总是要使用触发器基表的列值,如果某条语句需要某列修改前的值,使用:OLD就可以了,使用某列修改后的新值,用:NEW就可以了。如:OLD.DEPT_NO,:NEW.DEPT_NO。51Testing软件测试网zYm|
N,f$EG6F/B
11. 数据库文件的移动方法51Testing软件测试网0Lz z'n4L7}
当想将数据库文件移动到另外一个目录下时,可以用ALTER DATABASE命令来移动(比ALTER TABLESPACE适用性强):
7Pp;\7w&r| B$E"Lo01. 使用SERVER MANAGER关闭实例.
$@4D:c@"x6L6e0SVRMGR > connect internal;51Testing软件测试网7oea%z/t|}
SVRMGR > shutdown;51Testing软件测试网lgy3hG2z^
SVRMGR >exit;51Testing软件测试网bN'v_y?*Sf
2. 使用操作系统命令来移动数据库文件位置(假设这里操作系统为SOLARIS 2.6). 在UNIX中用 mv命令可以把文件移动到新的位置,
ak&nf|0#mv /ora13/orarun/document.dbf /ora12/orarun51Testing软件测试网3D2lr,hSD
3. 装载数据库并用alter database命令来改变数据库中的文件名.
yvTU2`m2e W0SVRMGR > connect internal;
V{?h/mAOn0SVRMGR > startup mount RUN73;51Testing软件测试网YZbwL.y
SVRMGR > alter database rename file51Testing软件测试网2o,kPE$SDR9Y8P
> ‘/ ora13/orarun/document.dbf’51Testing软件测试网6J$r.WJWc+y%{
> ‘/ ora12/orarun/document.dbf’;
)q
m
eR C],O04. 启动实例.
T'?*u{b_t}0SVRMGR > alter database open;
f$|*L~]&o051Testing软件测试网?m7vm9~#Q#E
q#E11.在Oracle中建一个编号会自动增加的字段,以利于查询51Testing软件测试网ZQf$H,[P
\
51Testing软件测试网4G9V:P!V
NE1、建立序列:
/nn9KiJ0CREATE SEQUENCE checkup_no_seq
{wg5i
J0NOCYCLE
o"Sz,a2VL[.v*s8Ogwb0MAXVALUE 999999999951Testing软件测试网&LJ"z*R/g L:z
START WITH 2;
4[3@8`V
Q"ZW051Testing软件测试网YB8l
NG2、建立触发器:51Testing软件测试网:^,E"~I%P.Q&b!~P9O
CREATE OR REPLACE TRIGGER set_checkup_no51Testing软件测试网 zUQ)i4djP
BEFORE INSERT ON checkup_history
EfR*^.L0FOR EACH ROW
8J M4O4w[Jr0DECLARE
EUX@AQ0next_checkup_no NUMBER;51Testing软件测试网 Eyj kyO(e
BEGIN
c1v5H5{9n:M0--Get the next checkup number from the sequence51Testing软件测试网&IQ}a E N4Z `
SELECT checkup_no_seq.NEXTVAL
*u&ehf0_%~!r'k`:c0INTO next_checkup_no51Testing软件测试网6Sc[4E
]D5b
FROM dual;
D]Q$s:J051Testing软件测试网6Z.I0V'B'j8WJ @n-@--use the sequence number as the primary key
$k-S3Xp-n+?
J|0--for the record being inserted
ogAF
{
d?-[n5DF0:new.checkup_no := next_checkup_no;
sVn2G`2SJ0END;51Testing软件测试网%Ft+scoWB)p
ks5wG x012.要找到某月中所有周五的具体日期51Testing软件测试网2_c.k+[K1L
select to_char(t.d,'YY-MM-DD') from (51Testing软件测试网n-ah4ovx%n
select trunc(sysdate, 'MM')+rownum-1 as d51Testing软件测试网h
v6H*a(GL
o!~st
from dba_objects51Testing软件测试网oj^sJ;`o5r
where rownum < 32) t
PmB7d/U0where to_char(t.d, 'MM') = to_char(sysdate, 'MM') --找出当前月份的周五的日期51Testing软件测试网r@o-[S-AE!d!c/~
and trim(to_char(t.d, 'Day')) = '星期五'
Z\?@u0--------
I}X6y v;gM003-05-0251Testing软件测试网{(Ty"f|-bK0M"K
03-05-09
Y^b t4o%}+Q'g$U003-05-16
X)H:M!jE003-05-2351Testing软件测试网H+Z0AdGMf
n
03-05-3051Testing软件测试网{le9vy&K`Y
51Testing软件测试网YA`!kpK,`;E@如果把where to_char(t.d, 'MM') = to_char(sysdate, 'MM')改成sysdate-90,即为查找当前
B~6IA+Sa i2{h'J0月份的前三个月中的每周五的日期。
r2q&P'_8[%V051Testing软件测试网Sz*\M
`b/U
收藏
举报
TAG: