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 eRC],O04. 启动实例.
T'?*u{b_t}0SVRMGR > alter database open;

f$|*L~]&o051Testing软件测试网?m7vm9~#Q#E q#E

11.在Oracle中建一个编号会自动增加的字段,以利于查询51Testing软件测试网ZQf$H,[P \

51Testing软件测试网4G9V:P!V N E

1、建立序列:
/nn9KiJ0CREATE SEQUENCE checkup_no_seq
{w g5i J0NOCYCLE
o"Sz,a2VL[.v*s8O gwb0MAXVALUE 999999999951Testing软件测试网&LJ"z*R/gL:z
START WITH 2;

4[3@8`V Q"ZW051Testing软件测试网Y B8l NG

2、建立触发器: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 ky O(e
BEGIN
c1v5H5{9n:M0--Get the next checkup number from the sequence51Testing软件测试网&I Q}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;
sV n2G`2SJ0END;51Testing软件测试网%Ft+sco WB)p

ks5wGx012.要找到某月中所有周五的具体日期51Testing软件测试网2_c.k+[K1L
select to_char(t.d,'YY-MM-DD') from (51Testing软件测试网n-ah4ov x%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:

 

评分:0

我来说两句

Open Toolbar