a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 145|回复: 0

[综合] Oracle辅导:Oracle数据库开发经验谈(2)

[复制链接]
发表于 2012-8-4 13:54:49 | 显示全部楼层 |阅读模式
----④ 当显示多条记录且数据项特别多时,如何组织录入及显示界面:
) o" q6 K: o. \) ]2 t' z- q) T  ---- PRN代码及设备代码在画布1(CONTENT型)上,其它数据项在画布2(STACK型)上,所有数据项为一个表的列或一个块的数据项。在拉动水平滚动条时或用TAB或敲回车键时,将看到全部数据项。这种排布方法适用于数据项特别多又想显示多条记录时用。主要制作顺序为:先建立两个画布,画布 1(CONTENT型),画布2(STACK型),然后建立块,选画布时用画布1,这样所有项都显示在画布1上,然后选中除PRN代码及设备代码之外的所有数据项,选TOOLS菜单下的PROPERTIES选项,将这些数据项的CANVAS属性选为画布2(STACK型),然后调整整体位置就可以了。
, m5 Q/ K7 Y) [, Q+ r& n  ----⑤ 如何在FORM的受限触发子中提交保存数据7 K6 l. {$ U& N
  ----在FORM中很多触发子是不能用COMMIT WORK语句的,当你在该触发子中使用了UPDATE,DELETE等操作并想立即存盘时,就需要COMMIT WORK语句了。首先在服务器端建立DB_SQL_COMMIT这个过程。
- l  O: h% P6 M3 T5 F  ----然后在FORM中该触发子中调用过程DB_SQL_COMMIT;就可以了,当然你可以根据自己需要将该过程加入参数,这样通过参数可以得到执行DML语句的权限。! X& k- d9 X# E# o
  ----⑥ 如何在FORM中实现某数据项自动按记录序号加一操作& w9 F# r8 ~9 B" Q7 b& u" q" q. _/ L
  ----设块名为VO,要操作的数据项为VO_ID,在该块中建立块级触发子WHEN-CREATE- RECORD,加入如下代码:
2 J' \* U$ s% q3 O4 E  :VO_ID:=:System.Trigger_Record;
0 u& B) m5 l: C8 W  ----这样每当生成新记录时VO_ID就会自动加一了。. y) d) I/ f! z: a: u; t
  ----⑦ 如何在一个FORM中调用另一个FORM,或在一个块中调用另一个块时显示特定的记录有时用户会要求在调用另一个FORM时,只显示相关的记录,举例如下,在一个FORM的块中有一个按钮,在按钮触发子中加入如下代码:) }  |. o  Q- P2 V2 V( [& M" k& q' ^# X
  DECLARE1 r, m# E1 ~4 C3 u5 S
  PM
' A3 I6 I0 s3 S, `. q; x4 K/ g  PARAMLIST;
$ n* V7 A% \" A4 ~  BEGIN0 L) X6 ~1 j  o. d! e' R) f
  PM:=GET_PARAMETER_LIST('PM');5 B7 c, X7 ~& K# ^( Q: C
  IF NOT ID_NULL(PM) THEN" z" Z" b' J# ]& \; `% {
  DESTROY_PARAMETER_LIST('PM');7 s$ W/ ~) K' ]1 K5 S
  END IF;
/ _, b0 }4 I+ X5 o) H  PM:=CREATE_PARAMETER_LIST('PM');
, c& b5 b6 W/ j8 f8 J5 ^& [  ......................
3 x8 `; L2 H0 K& ?- |7 t  ADD_PARAMETER(PM,'THE_WHERE',
7 r+ _* p# c- {( X  TEXT_PARAMETER,'EM_NAME=''EM4''
( t& P# j  O( W, d6 f  AND EM_PROJECT_NAME=''支架预制''');3 T3 P. \  C8 B1 U! N- Y
  OPEN_FORM('PAYMENT',ACTIVATE,SESSION,PM);$ g; s9 H; E" O- D# V' l( t
  END;  5 Q8 ]* E" E/ c% a, h" p
  ----其中EM_NAME,EM_PROJECT_NAME为本FORM某块的数据项,PAYMENT为要调用的FORM模块。这样通过传递参数列表就可以得到想要的结果。在FORM. PAYMENT.FMB中,建立一参数THE_WHERE,CHAR型,长1000,然后在PAYMENT.FMB中建立FORM级触发子WHEN- NEW-FORM-INSTANCE,在该触发子中加入以下语句:- \' d5 x; X2 j# J, M: S- h
  IF :PARAMETER.THE_WHERE IS NOT NULL THEN" B7 k. }* _' I; Y6 o
  SET_BLOCK_PROPERTY('PAYMENT',' q6 g2 `) F. y  h2 u
  DEFAULT_WHERE,:PARAMETER.THE_WHERE);& T! b. i0 j7 V, K& I
  END IF;
! h! Q: a3 E- q* c& M2 x  ----其中PAYMENT为要显示的块,这样通过参数传递就得到想要的某些特定条件的数据了。* z3 U6 g( B% N& Y( D
  ----⑧ 在FORM中当有主从块时,连续输入记录如何避免被不断的提示保存:
! ~& ^3 f! x) C4 e1 c+ S  ----每输入一条主记录和若干条该主记录的从记录后,此时再导航到主块输下一条记录,FORM就会提示你是否要保存记录,而你并不希望 FORM提示,让它自动保存,此时你可以到Program Units中找到过程PROCEDURE Clear_All_Master_Details,然后在这个过程中找到语句6 o% x: z  w! g
  三.数据库管理, {( f1 |" h4 f2 V
  ----① 在删除一个表中的全部数据时,须使用TRUNCATE TABLE 表名;因为用DROP TABLE,DELETE * FROM 表名时,TABLESPACE表空间该表的占用空间并未释放,反复几次DROP,DELETE操作后,该TABLESPACE上百兆的空间就被耗光了。* Q! x5 W( a' C# i# I
  ----② 数据库文件的移动方法
7 X  {) `% Z. j$ {# {+ m  ----当想将数据库文件移动到另外一个目录下时,可以用ALTER DATABASE命令来移动(比ALTER TABLESPACE适用性强):% A7 [+ V5 s/ E
  ----1. 使用SERVER MANAGER关闭实例.0 Z/ }* O3 x6 p# ~# ?
  SVRMGR > connect internal;
& B9 b% {8 l  b, |( y  ~0 W  SVRMGR > shutdown;, W/ [% V! G6 U* H) Y) y% j
  SVRMGR >exit;
4 H2 `, K5 D% E( Q1 O     ----2. 使用操作系统命令来移动数据库文件位置(假设这里操作系统为SOLARIS 2.6). 在UNIX中用 mv命令可以把文件移动到新的位置,
" A* ?5 N7 c$ w& W0 {  #mv /ora13/orarun/document.dbf /ora12/orarun
: S7 u: u, `4 F/ d1 t+ J  ----3. 装载数据库并用alter database命令来改变数据库中的文件名.
: p4 C% Y3 H8 G) R+ w- f  SVRMGR > connect internal;0 m! b8 D1 M* o* `
  SVRMGR > startup mount RUN73;* {. h% A+ w0 u$ Y
  SVRMGR > alter database rename file
+ T! v5 v3 a) K+ {: j( a  > ‘/ ora13/orarun/document.dbf’
, J8 h  |* p0 ?6 w$ Z# |$ f  > ‘/ ora12/orarun/document.dbf’;5 w. B- c2 v% m: J- A. J5 u
  ----4. 启动实例.
( G6 m2 o6 i, j/ }6 Z+ _  SVRMGR > alter database open;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-6-18 18:26 , Processed in 0.244172 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表