首页 软件下载 产品购买 客户服务 软件定做 加盟 留言 用户 技术文档 新闻
2018年6月20日 星期三   您现在位于: 首页 →  技术文档 → 平台技术(综合)
OraCle的常见问题和技术指导
2006年1月10日  作者:马清松  宏达管理软件下载定制开发服务在线  浏览选项:    本文已被浏览 6573 次
OraCle的常见问题和技术指导
1、NULL值。①对于单值函数来讲,包含空值(NULL)的任何算术运算其结果都为NULL,因而要用NVL函数来制定一个特定的值来代替NULL值。聚组函数忽略空值并且计算出一个结果;②为了测试空值,SQL提供了IS NULL操作符(或者是IS NOT NULL返回所有存在数据的行。)例如:SELECT * FROM WZ_SLDMX WHERE ZYID IS NULL;将提取出所有的ZYID为空的行。

2.Char和VarChar2:

①、Char数据类型最长为255各字符,声明为Char的列用空格来填充来达到列定义的大小,一般超过20个字符长度的类型避免用Char来定义列,因为它占用较大的存储控件。Char类型的数据在where子句中不需要删除空格,即可取出数据。例如:wz_sld 中的sldh char(20),则select * from wz_sld where sldh='200100004873';和 select * from wz_sld where sldh='200100004873 '得到的结果是一致的。 在SQL ANYWHERE 中的CHAR和VARCHAR只有长度的不同,全部认为空格即为1个字符。

②、VarChar2数据类型最多可有2000个字符,Oracle为VarChar2字段分配实际需要的存储空间。VarChar2类型的数据将会把空格页当作一个字符。在where子句中,值'20010 '和'20010'是两个完全不同的值。

3、数据管道

用数据管道导表时一定要注意VARCHAR2和CHAR类型,数据管道默认CHAR和VARCHAR2全部为CHAR类型。

4、如果涉及到存储过程用到的表修改后,存储过程将变为无效,需要recompile(重新编译);如果删除的表正好是触发器中要插入、更新的表,那么触发器将被删除,若是触发器中用到的表,则触发器将变为无效。

5、如果数据库中的表有一时间类型的字段做主键,不能存为dbf库后,通过truncate table后再导入到此表中,因为导出的dbf数据只是日期型的;应将数据存为*.txt文件;

6、用Data manager导入整个用户时,如果要导入的用户已有包含表、序列、存储过程等,需删除此用户,重新建一用户再进行导入。也可进行部分表的导入,前提是此用户中不包括这些表。

7、在导入表时,如果提示空间不足,则应到storage manager中去扩展表空间。一般我们扩展rollback_data 和user_data。

注意:不管是在公司还是在用户那,再扩表空间时,将原先的数据进行备份,避免扩表空间时导致oracle无效。

备份可采取两种方式:①、用导出的方法将用户备份为*.dmp。

②、将oracle安装的所在目录下的database文件夹进行压缩备份,如果oracle确实无效了,将所有的oracle服务停止,删除原先的database文件夹,将备份的database文件夹解压缩放入。

★ 由于oracel的表空间最多只能扩至4GB多一点,如果需要更大的空间,需要在storage manager中tablespace中的user_data,在右边的窗口中的datafiles中点击"ADD"按钮,添加一个文件,文件的路径与原先的文件相同,文件名应以ora为后缀。

8、用insert into时,最好不要用insert into tablename values(:1,:2);因为如果表的列数改变或列的位置改变,都会引起插入错误;解决:insert into tablename (col1,col2) values(:1,:2)。

9、在Oracle Schema Manager中创建序列时Maximum的最大值只能为999999999,我们一般的要用序列的列都为Char(20),所以我们要在Oracle Schema Manager中创建序列时可以将Maximum的最大值输入20个9,点击Show SQL按钮,将显示创建序列的语法,复制其语法到PowerBuilder中的Database Administration中 执行此SQl语句即可创建序列。

10、如果所写的SQL语句执行的速度特别的慢,首先要看其是否有Where字句,如果没有则应加上Where字句,并一定限度的加一些索引。

索引只能对where字句中出现的列管用,如果where字句中出现is null或is not null或not in或用到函数操作了此列,那么oracel就不使用这个索引,但是min或max用于单独一个列时,就会使用索引。

若没有where子句,索引将不被使用。作为有可能作为表连接中的关联列创建索引,也会提高速度. 11、在写SQL语句时一定要用Oracle的函数。

12、如果表中的数据太多(一万多条记录),用delete from tablename;删除后会出错,此时应该在写delete语句时加入where条件,进行分批删除;

如果要清除所有记录,请用tuancate table进行数据的删除,此命令不能进行回滚,只要一执行,则就会永久的删除。

13、Decode函数的用法

Decode(value,if1,then1,if2,then2,…,else)相当于用pb中的if then else的功能,例如鹿泉电费计算中大量的用了decode函数,现举一例:

DECODE(DF_JLD_T.WGB,1,SUM(B."WGSSDL"),0) 如果df_jld_t中的wgb=1则sum(wgssdl)(无功损失电量),否则为0.

14、and 和or 的用法

and和or是我们在写sql语句时最常用的逻辑运算符,应该时刻注意and的优先级比or高。例如:

<1>、select * from newspager where section='B' and page = 1 or page=2; 

//where条件等价于(section='B' and page = 1) or page=2

<2>、select * from newspager where page = 1 or page=2 and section='B'; 

//where条件等价于page = 1 or (page=2 and section='B')

<3>、select * from newspager where section='B' and (page = 1 or page=2);

15、Group by 和 having使用:

Group by 分组函数,

Having子句的功能与where子句非常类似,他仅与组函数的结果有关我们一般都在数据窗口对象中进行分组显示,根据分组列进行排序

例:

<1>、select * from pw_gt where gtid in (select gtid from pw_gt group by gtid having count(*) >1) order by gtid;

** oracle查询语句的执行顺序:

1)、根据where子句选择行

2)、根据group by子句对这些行进行聚合

3)、对每一分组用组函数计算结果

4)、根据having 子句选择和排除组

5)、根据order by子句中的组函数所得到的结果对组进行排序,且order by必须使用组函数或Group by 子句中的列

16、常用SQL语句

① Select(查询)

语法:select column1,column2,… from table where 条件1 逻辑操作符 条件2…;

关键词:select from where 

其中:分号为结束符;select关键字告诉ORACLE你需要那些列,from告诉ORACLE那些列所在的表名,where[为可选项]关键字告诉ORACLE你所选取的信息满足什么条件;

注:为了告诉ORACLE把返回的信息按你指定的顺序排序,使用order by

例如: Ⅰ:select pbbh,yhbh,yhmc from pw_pbda; 此语句将提取出pw_pbda表中所有行的pbbh,yhbh,yhmc的信息,可返回多行;

Ⅱ:select pbbh,yhbh,yhmc from pw_pbda where xz='城镇'; 此语句将提取出pw_pbda表中乡镇是城镇的pbbh,yhbh,yhmc的信息,可返回多行;

Ⅲ: select pbbh,yhbh,yhmc from pw_pbda where xz='城镇' order by yhbh desc; 此语句将提取出pw_pbda表中乡镇是城镇的pbbh,yhbh,yhmc的信息,信息根据yhbh递减的顺序排序;

注:desc关键字表示递减,缺省或asc表是递增;

Ⅳ:select * from pw_pbda; 其中 * 表示单表中的所有的列,可以联合where、order by使用。

Ⅴ: select count(*) from pw_pbda; 其中 count(*)返回符合条件记录的总行数,只返回一条记录。

②delete(删除)

语法:delete from table where 条件1 逻辑操作符 条件2…; where子句是用来删除你想删除的行,不含where子句的delete全部清除表中的内容; 执行完delete语句后,在没有退出此窗口前,可以用rollback work;来撤消删除;

Ⅰ:执行以下语句后将不能删除数据

delete from pw_pbda;

select * from pw_pbda; 返回0行数据

rollback work; 或关闭图2.8窗口,重新进入进行查询;

select * from pw_pbda; 返回pw_pbda的所有行的数据

II:commit work;提交功能

为了保证删除成功,我们可以执行以下操作

delete from pw_pbda;

commit work; 或关闭图2.8窗口,让pb自动执行提交操作。

注:delete语句在一定程度上可以恢复删除的语句,已经提交将无法恢复;

③update(更新)

语法:update table set column1=:变量1,set column2=:变量2 where 条件1…;

update需要给你想改变的每个列设置特定的值,并且用where子句指定想修改的行 为了确保更新的正确性,用select对要更新的值进行查询,进行update,再查询,确认无误后,重新执行 update操作,执行提交工作commit work;或关闭图2.8窗口。

④insert(插入)

语法:insert into table(column1,column2,…) values(values1,values2,…);其中values的值可以是select语句,且语句中可以存在常数值。

注:column1,column2,…必须同values1,values2,…值相对应(个数和对应的数据类型);如果是对表的所有列进行操作,则column1,column2,…可以省略,即:insert into table values(values1,…)。

用insert语句插入数据时必须保证:①主码的唯一性;②不可为空的列插入数值;只有保证此两条后,插入数据方可成功。

 发布人:maqingsong21
 [ → 我要发表文章 ]
上篇文章:没有找到相关文章
下篇文章:没有找到相关文章
→ 主题所属分类:  平台技术 → 综合 → 『关闭窗口』
 热门文章
 
 SQL基础:创建新表 (104790)
 最详细的SQL 参考资料下载!! (27188)
 如何利用数据库信息开发平台制作信息管理系统 (11337)
 《数据库信息管理开发平台》疑难解答 (10256)
 SQL基础:使用SQL从表中取记录 (9085)
 随心所欲设计自己的信息管理系统 (8518)
 中级SQL:其它常用的SQL表达式,函数,和过程(2) (8471)
 菜鸟也可做软件 (8452)
 数据库开发平台的问题 (8299)
 中级SQL:SQL核心语句 (8013)
 最近更新
 
 OraCle的常见问题和技术指导 (1月10日)
 最新推出《箱包材料批发管理系统》软件,敬请查看... (11月25日)
 最新推出《会展物流辅助管理系统》软件,敬请下载... (11月3日)
 最新推出《宏达劳教人员管理系统》软件,敬请查看... (10月31日)
 最新推出《宏达图书音像进销存管理系统》软件,敬... (10月31日)
 最新升级《宏达计件工资管理系统》软件,敬请查看... (10月22日)
 最新升级《宏达代理人保险管理系统》软件,敬请查... (10月22日)
 最新升级《宏达车辆配件管理系统》软件,敬请查看... (10月22日)
 最新推出《宏达制药行业销售管理系统》软件,敬请... (10月22日)
 最新推出《宏达机动车整车出厂合格证管理系统》软... (10月22日)
 文章搜索
 
搜索选项:            
关于我们 - 站内短信 - 与我在线 - 管理
Copyright © 2003-2008 宏达管理软件下载定制开发服务在线 All Rights Reserved(鲁ICP备05057070号)

鲁公网安备 37150202000143号

 当前有 240 人在线