Oracle数据库开发技术经验浅谈 (oracle数据库)

教程大全 2025-07-13 13:39:00 浏览

导读:Oracle数据库 作为大型数据库管理系统,近年来一直占有世界上高端数据库的***份额,其强大而完善的数据库管理功能,以及ORACLE公司推陈出新的不断努力,一直成为IT业界瞩目的焦点。岭澳核电站的数据库平台采用了ORACLE7.3作为后端平台,前端选择了ORACLE公司的DEVELOPER 2000 及DESIGNER 2000作为开发工具,采用了目前流行的CLIENT/SERVER模式。下文中是开发人员在平时的开发工作中总结出的经验,现在拿出来供大家参考学习。

一. ORACLE SQL PLUS 使用技巧:

—-①查找重复记录:

[pre]SELECT DRAWING,DSNO FROM EM5_PIPE_PREFAB

WHERE ROWID!=(SELECT MAX(ROWID) FROM EM5

_PIPE_PREFAB D

WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND

EM5_PIPE_PREFAB.DSNO=D.DSNO);

—-执行上述SQL语句后就可以显示所有DRAWING和DSNO相同且重复的记录。

—-删除重复记录:

[pre]DELETE FROM EM5_PIPE_PREFAB

WHERE ROWID!=(SELECT MAX(ROWID) FROM EM5

_PIPE_PREFAB D

WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND

EM5_PIPE_PREFAB.DSNO=D.DSNO);

—-执行上述SQL语句后就可以刪除所有DRAWING和DSNO相同且重复的记录。

—-② 快速编译所有视图

—-当在把数据库倒入到新的 服务器 上后(数据库重建),需要将视图重新编译一遍,因为该表空间视图到其它表空间的表的连接会出现问题,可以利用PL/SQL的语言特性,快速编译。

[pre]SQL >SPOOL ON.SQL

SQL >SELECT ‘ALTER VIEW ‘||TNAME||’comPILE;’ FROM TAB;

SQL >SPOOL OFF

Oracle数据库开发技术经验浅谈

然后执行ON.SQL即可。SQL >@ON.SQL

当然,授权和创建同义词也可以快速进行,如:

[pre]SQL >SELECT ‘GRANT SELECT ON ’

||TNAME||’ TO USERNAME;’ FROM TAB;

SQL >SELECT ‘CREATE SYNONYM

‘||TNAME||’ FOR USERNAME.’||TNAME||’;’ FROM TAB;

③ 用外联接提高表连接的查询速度

在作表连接(常用于视图)时,常使用以下方法来查询数据:

[pre]SELECT PAY_NO, PROJECT_NAME

WHERE A.PAY_NO NOT IN (SELECT PAY_

NO FROM B WHERE VALUE >=120000);

—-但是若表A有10000条记录,表B有10000条记录,则要用掉30分钟才能查完,主要因为NOT IN要进行一条一条的比较,共需要10000*10000次比较后,才能得到结果。该用外联接后,可以缩短到1分左右的时间。

—-⑤ 怎样在数据库触发器中使用列的新值与旧值

—-在数据库触发器中几乎总是要使用触发器基表的列值,如果某条语句需要某列修改前的值,使用:OLD就可以了,使用某列修改后的新值,用:NEW就可以了。如:OLD.DEPT_NO,:NEW.DEPT_NO。

二.ORACLE DEVELOPER 2000使用技巧:

—-① 改变FORM(FMX模块)运行时的runform4.5的题头:

—-DEVELOPER2000中FMX默认题头为:Developer/2000 Forms Runtime for Windows 95 / NT 你可以改为自己定义的标题,

—-1. 在Form级触发器中添加触发WHEN-NEW-FORM-INSTANCE

—-2. 在此触发器中写如下代码:

[pre]set_window_property(FORMS_MDI_WINDOW,TITLE,’Point

SYSTEM 欢迎使用’);

—-② 如何隐藏菜单中的window选项:

—-在创建自己的菜单时,***选项总有window项,下面介绍如何去掉它,

—-1. 创建一个Menu

—-2. 在Menu中建立一个Item,命名为WINDOW。

—-3. 设置该Item属性如下:

—-Menu Item Type:Magic

Command Type:Null

Magic Item:Window

Lable:为空

—-③ 怎样创建动态下拉列表List

—-Developer 2000 中的列表是通过设置相关属性而完成数据项的列表设置的,但那只是静态的,有时你想让某项成为动态的列表,随输入数据的改变而改变,就需要动手去编个小程序。下面详细介绍怎样去做:

—-有块EBOP_CABLE_ACCOUNT,下有SPECIFICATION数据项,当一进入该模块时,就将SPECIFICATION项在数据库中存储的值动态显示出来,先在Form4.5中建立一个PRCEDURE,命名为DYN_LIST:

然后在FORM的WHEN-NEW

-FORM-INSTANCE触发子中加入一行:

—-这样一进入该FMX,就会动态刷新该列表。除此之外,SPECIFICATION数据项改为列表项。

—-④ 当显示多条记录且数据项特别多时,如何组织录入及显示界面:

—- PRN代码及设备代码在画布1(CONTENT型)上,其它数据项在画布2(STACK型)上,所有数据项为一个表的列或一个块的数据项。在拉动水平滚动条时或用TAB或敲回车键时,将看到全部数据项。这种排布方法适用于数据项特别多又想显示多条记录时用。主要制作顺序为:先建立两个画布,画布1(CONTENT型),画布2(STACK型),然后建立块,选画布时用画布1,这样所有项都显示在画布1上,然后选中除PRN代码及设备代码之外的所有数据项,选TOOLS菜单下的PROPERTIES选项,将这些数据项的CANVAS属性选为画布2(STACK型),然后调整整体位置就可以了。

—-⑤ 如何在FORM的受限触发子中提交保存数据

—-在FORM中很多触发子是不能用COMMIT WORK语句的,当你在该触发子中使用了UPDATE,DELETE等操作并想立即存盘时,就需要COMMIT WORK语句了。首先在服务器端建立DB_SQL_COMMIT这个过程。

—-然后在FORM中该触发子中调用过程DB_SQL_COMMIT;就可以了,当然你可以根据自己需要将该过程加入参数,这样通过参数可以得到执行DML语句的权限。

—-⑥ 如何在FORM中实现某数据项自动按记录序号加一操作

—-设块名为VO,要操作的数据项为VO_ID,在该块中建立块级触发子WHEN-CREATE- RECORD,加入如下代码:

:VO_ID:=:System.Trigger_Record;

—-这样每当生成新记录时VO_ID就会自动加一了。

—-⑦ 如何在一个FORM中调用另一个FORM,或在一个块中调用另一个块时显示特定的记录有时用户会要求在调用另一个FORM时,只显示相关的记录,举例如下,在一个FORM的块中有一个按钮,在按钮触发子中加入如下代码:

[pre]DECLARE PM

PARAMLIST;

PM:=GET_PARAMETER_LIST(‘PM’);

IF NOT ID_NULL(PM) THEN

DESTROY_PARAMETER_LIST(‘PM’);

PM:=CREATE_PARAMETER_LIST(‘PM’);

ADD_PARAMETER(PM,’THE_WHERE’,TEXT_PARAMETER,’EM_NAME=”EM4”

AND EM_PROJECT_NAME=”支架预制”’);

OPEN_FORM(‘PAYMENT’,ACTIVATE,SESSION,PM);

—-其中EM_NAME,EM_PROJECT_NAME为本FORM某块的数据项,PAYMENT为要调用的FORM模块。这样通过传递参数列表就可以得到想要的结果。在FORM. PAYMENT.FMB中,建立一参数THE_WHERE,CHAR型,长1000,然后在PAYMENT.FMB中建立FORM级触发子WHEN-NEW-FORM-INSTANCE,在该触发子中加入以下语句:

[pre] IF :PARAMETER.THE_WHERE IS NOT NULL THEN

SET_BLOCK_PROPERTY(‘PAYMENT’,

DEFAULT_WHERE,:PARAMETER.THE_WHERE);

—-其中PAYMENT为要显示的块,这样通过参数传递就得到想要的某些特定条件的数据了。

—-⑧ 在FORM中当有主从块时,连续输入记录如何避免被不断的提示保存:

—-每输入一条主记录和若干条该主记录的从记录后,此时再导航到主块输下一条记录,FORM就会提示你是否要保存记录,而你并不希望FORM提示,让它自动保存,此时你可以到Program Units中找到过程PROCEDURE Clear_All_Master_Details,然后在这个过程中找到语句

三.数据库管理

—-① 在删除一个表中的全部数据时,须使用TRUNCATE TABLE 表名;因为用DROP TABLE,DELETE * FROM 表名时,TABLESPACE表空间该表的占用空间并未释放,反复几次DROP,DELETE操作后,该TABLESPACE上百兆的空间就被耗光了。

—-② 数据库文件的移动方法

—-当想将数据库文件移动到另外一个目录下时,可以用ALTER>[emailprotected][/email])

这些就是我要为大家介绍的关于Oracle数据库开发技术的经验的全部内容,更多的经验还需要大家在以后的工作中区发现总结,希望上文中讲到的内容对大家能够有所帮助。

【编辑推荐】


如何实现win和linux之间oracle数据库的架构

RAC(Real Application Cluster,真正应用集群)是Oracle9i数据库中采用的一项新技术,也是Oracle数据库支持网格计算环境的核心技术。 它的出现解决了传统数据库应用中面临的一个重要问题:高性能、高可伸缩性与低价格之间的矛盾。 过去,如果企业希望其信息系统具有良好的可靠性、可伸缩性和高性能,就必须选择基于主机的系统,这意味着企业在系统建设之初就必须投入大量资金;如果要节省成本,企业可以选择基于客户机/服务器的计算体系,并在需要时逐步增添新硬件、扩展系统,但如果需要进行应用升级,企业就不得不付出高昂的升级费用,同时这种分布式系统的维护成本也不菲。 采用RAC技术,用户就有了更多的选择,无论是选择基于Intel架构的PC服务器、Unix工作站,还是最近两年颇受关注的刀片服务器;也无论是选择Unix、Windows,还是Linux操作系统,只要在这些软硬件平台上部署了Oracle9i的RAC系统,这些分布在各处的系统就能组成集群,实现用户所需的高性能和高可靠性。 且当系统需要进一步扩展时,无需对应用程序进行任何修改。 “这就是基于网格计算环境的数据库,也是数据库技术的未来发展方向。 ”Oracle公司负责数据库业务的高级副总裁Andy Mendelsohn先生说。 为什么Oracle的RAC技术能够实现以上目标?因为RAC技术采用了“sharing everything”的实现模式。 据Oracle公司技术专家介绍,RAC技术通过CPU共享和存储设备共享来实现多节点之间的无缝集群,用户提交的每一项任务被自动分配给集群中的多台机器执行,用户不必通过冗余的硬件来满足高可靠性要求。 另一方面,RAC可以实现CPU的共享,即使普通服务器组成的集群也能实现过去只有大型主机才能提供的高性能,这也是Intel、Dell等公司非常愿意与Oracle合作、共拓高端市场的原因。 除了RAC技术,Oracle9i数据库还提供其他功能来支持网格计算,包括支持在数据库之间进行数据快速复制的Transportable Tablespaces、支持数据流更新的Oracle Streams、支持应用可移植性的One Portable Codebase等。 Mendelsohn认为,对那些需要建立数据中心的企业来说,Oracle9i RAC加上刀片服务器和Linux操作系统,就完全能够替代传统的基于大型机的数据系统。

oracle 与 sql 有什么区别

一、开放性1. SQL Server只能在windows上运行,没有丝毫的开放性,操作系统的系统的稳定对数据库是十分重要的。 Windows9X系列产品是偏重于桌面应用,NT server只适合中小型企业。 而且windows平台的可靠性,安全性和伸缩性是非常有限的。 它不象unix那样久经考验,尤其是在处理大数据库。 2. Oracle能在所有主流平台上运行(包括 windows)。 完全支持所有的工业标准。 采用完全开放策略。 可以使客户选择最适合的解决方案。 对开发商全力支持。 二、可伸缩性,并行性1. SQL server并行实施和共存模型并不成熟,很难处理日益增多的用户数和数据卷,伸缩性有限。 2. Oracle并行服务器通过使一组结点共享同一簇中的工作来扩展windownt的能力,提供高可用性和高伸缩性的簇的解决方案。 如果windowsNT不能满足需要,用户可以把数据库移到UNIX中。 Oracle的并行服务器对各种UNIX平台的集群机制都有着相当高的集成度。 四、性能1. SQL Server多用户时性能不佳2. Oracle性能最高, 保持开放平台下的TPC-D和TPC-C的世界记录。 五、客户端支持及应用模式1. SQL ServerC/S结构,只支持windows客户,可以用ADO、DAO、OLEDB、ODBC连接。 2. Oracle多层次网络计算,支持多种工业标准,可以用ODBC、JDBC、OCI等网络客户连接。 六、操作简便1. SQL Server操作简单,但只有图形界面。 2. Oracle较复杂,同时提供GUI和命令行,在windowsNT和unix下操作相同。 七、使用风险1. SQL server完全重写的代码,经历了长期的测试,不断延迟,许多功能需要时间来证明。 并不十分兼容。 2. Oracle长时间的开发经验,完全向下兼容。 得到广泛的应用。 完全没有风险。 最后价格上 ORACLE贵过SQLSRVER

oracle表中怎么建序列

oracle表中创建序列语法:CREATE SEQUENCE name[INCREMENT BY n][START WITH n][{MAXVALUE n | NOMAXVALUE}][{MINVALUE n | NOMINVALUE}][{CYCLE | NOCYCLE}][{CACHE n | NOCACHE}]示例:increment by n:表明值每次增长n(步长)。 start with n: 从n开始。 {MAXVALUE n | NOMAXVALUE}: 设置最大值。 {MINVALUE n | NOMINVALUE}: 设置最小值,start with不能小于最小值。 CYCLE | NOCYCLE : 是否循环,建议不使用CACHE n | NOCACHE: 是否启用缓存。 2、插入数据到表中示例:INSERT INTO emp VALUES(emp_sequence , LEWIS, CLERK,7902, SYSDATE, 1200, NULL, 20);Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。 它是一种高效率、可靠性好的 适应高吞吐量的数据库解决方案。 ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。 扩展资料:sql server数据库里建序列:alter table cust_infoaddsequence intinsert into cust_info (sequence)select row_number() over(orderbycust_id) as cust_id_seq from cust_info

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐