1)在delphi中,经常有人写SQL并传入到数据库中执行,一般都是把sql拼出来,如下:
sSql := 'select * from ContainerStateH where container like '+QuotedStr('%'+trim(Edit2.Text)+'%') +' order by BeginDay';
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(sSql);
ADOQuery1.Open;
但是从oracle数据库角度考虑,这样会影响执行效率.应该把sql的参数通过绑定方式实现,如下:
sSql := 'select * from ContainerStateH where container like :id order by BeginDay';
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(sSql);
ADOQuery1.Parameters.parambyname('id').Value:='123456';
ADOQuery1.ExecSQL;
这样的话到oracle后台跟踪出来的都是写参数变量名称,但执行效率提高不少.
2)另外还有种办法就是修改oracle的session表中的cursor_sharing参数,默认为EXACT,改为FORCE,这样以后所有where后面带条件的参数都被转化为参数变量,提高数据库执行效率.但是改完之后应用程序中的select max(beginday) from *** 后面不带group by语句就会出现异常
alter session set cursor_sharing=FORCE ......
ORACLE ERP开发基础之前言
前言
偶是2008年才开始接触,这个传说中的Oracle ERP。而在此前四年间,特别是在做JAVA程序员二年多的时间中,养成了一种对架构、模式、面向对象的狂热追求,导致对EBS亦常失望。因为EBS11i没有软件模式、设计、分层等,只有象面条般的PL/SQL语句。
EBS入门一周之口水贴
Oracle ERP-ebs11i。近一个周的摸索,算是对这个号称全球ERP第二的东东有点“表面”认识了。 在这个领域,虽然ORACLE FORMS也是使用JVM来运行,但跟JAVA搭不上一点边。官方语言是PL/SQL。开发工具相当古老FORMS6i,要靠补丁才能在XP下运行。JAVA当中的模式、设计、分层等等,根本使用不上。只是拖拉一下控件就好,就算你不想拖拉也不行。因为ORACLE FORMS根本不支持,只允许拖拉式编程。比VB/DELPHI这类语言还死心眼。唯一要编程的就是写些SQL代码,也谈不上什么分层,表现层与SQL混 在一起。大多数的函数,ORACLE都内置了,没有内置的,你也非常难去实现。 Forms的拥护者说是Oracle的目的是要减少代码。这种理由根本站不住脚,通过属性设置来实现编程,最终也是要生成代码的。只是这些代码Oracle不让你看到而已。于是 Fo ......
在创建数据库时,SPFile文件中部分必须考虑的参数值:
基本规则
a.在SPFile文件中,所有参数都是可选的,也就是说只需要在初始化参数文件中列出那些需要修改的参数,其它保持默认值即可。
b.SPFile文件中只能包含参数赋值语句和注释语句。注释语句以“#”符合开头,是单行注释。
c.SPFile文件中列出的参数是不分次序的。
d.SPFile参数的名称和值是不区分大小写的,只有在Unix系统中,由于操作系统本身区分文件名称和路径的大小写,才需要在设置参数时注意大小写问题。
e.若要在SPFile文件的同一行设置多个参数,需要使用空格分隔。比如:PROCESSES=100 CPU_COUNT=1 OPEN_CURSORS=10
f.对于可以具有多个值的初始化参数,需要将所有的值放在一个括号内,并使用逗号进行分隔,比如ROLLBACK_SEGMENTS=(SEG1,SEG2,SEG3,SEG4,SEG5)
g.在SPFile文件中,可以使用IFILE参数引用其它的SPFile文件。
h.对于具有字符串类型值的参数,如果字符串中包含空格或制表符,必须使用单引号或双引号将字符串括起来,比如:NLS_TERRITORY="CZECH REPUBLIC"
常用参数:
DB_NAME和DB_DOMAIN
全局数据库名通常由本地数据库标识 ......
ORACLE开发工具策略介绍
很多同学问起我们Oracle ERP二次开发以后会使用什么样的语言和开发工具?首先我们来看看Oracle开发工具产品的策略
Oracle开发工具的策略是提供能够开发基于Internet模型下企业应用的软件开发工具,因此Oracle提供了两个并行的开发工具以及新的快速Web开发工具:
一,基于PL/SQL语言环境的传统开发工具
这些工具的编程语言和执行环境基于PL/SQL,其中包括以下的主要产品:
Oracle Designer:用来进行分析建模
Oracle Forms:用来开发应用系统的界面以及架构
Oracle Reports:报表发布解决方案
为了能够使传统的开发工具更好的发布和运行与Internet模型下,Oracle将Forms和Reports的运行环境也集成到Oracle Application Server中
?
二,基于Java语言环境的Java开发工具
针对日益发展的Java/J2EE技术,Oracle开发了基于Java语言,运行于J2EE容器的工具Oracle JDeveloper
Oracle JDeveloper:基于UML建模环境和3-GL的Java应用开发工具;同时集成了J2EE框架Oracle ADF(Application Development Framework)来快速进行Java Web应用开发
BI XMLPublisher:实现报表发布方案
Oracle Container for J2EE(OC4J):J2EE Web应用的运行环境
? ......
在对数据库进行操作过程中我们可能会遇到这种情况,表中的数据可能重复出现,使我们对数据库的操作过程中带来很多的不便,那么怎么删除这些重复没有用的数据呢?
重复数据删除技术可以提供更大的备份容量,实现更长时间的数据保留,还能实现备份数据的持续验证,提高数据恢复服务水平,方便实现数据容灾等。 重复的数据可能有这样两种情况,第一种时表中只有某些字段一样,第二种是两行记录完全一样。Oracle数据库重复数据删除技术有如下优势:更大的备份容量、数据能得到持续验证、有更高的数据恢复服务水平、方便实现备份数据的容灾。
一、删除部分字段重复数据
先来谈谈如何查询重复的数据吧。
下面语句可以查询出那些数据是重复的:
Sql代码
select 字段1,字段2,count(*)
from 表名 group by 字段1,字段2
having count(*) > 1
select 字段1,字段2,count(*)
from 表名 group by 字段1,字段2
having count(*) > 1
将上面的>号改为=号就可以查询出没有重复的数据了。
想要删除这些重复的数据,可以使用 ......
查看锁表进程SQL语句1:
select sess.sid,
sess.serial#,
lo.oracle_username,
lo.os_user_name,
ao.object_name,
lo.locked_mode
from v$locked_object lo,
dba_objects ao,
v$session sess
where ao.object_id = lo.object_id and lo.session_id = sess.sid;
查看锁表进程SQL语句2:
select * from v$session t1, v$locked_object t2 where t1.sid = t2.SESSION_ID;
杀掉锁表进程:
如有記錄則表示有lock,記錄下SID和serial# ,將記錄的ID替換下面的738,1429,即可解除LOCK
alter system kill session '738,1429';
Oracle有自己的进程管理策略,很多情况下杀进程往往不能即使生效,可以加alter system kill ... immediately 试试 ......