网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.如何在Oracle中建立汉字拼音对照.
.EXP错误(无效的列名).
.可预见的Oracle应用程序性能调优.
.为什么错误日志里面出现“httpd:.
.oracle 的共享连接和专用连接方式.
.ORACLE SQL性能优化系列(三).
.Access2000迁移到Oracle9i要点说.
.Oracle9i初始化参数中文说明16.
.Oracle归档模式的命令及参数说明.
.Oracle 9i充分利用自动撤销管理的.
.数据库备份与恢复测试(8).
.ORACLE 数据库的逻辑备份.
.Linux 帐号与身份管理.
.Oracle数据库的启动和关闭方式小.
.回滚段表空间数据文件丢失或损坏.
.量身订作一个 OS.
.Oracle的空间管理.
.Oracle10g对回滚操作时间的准确评.
.linux之间如何进行串口通讯.
.Oracle中如何快速删除数据字典管.

深入探讨Oracle数据库存储过程的若干问题

发表日期:2008-8-1


1.在oracle中,数据表别名不能加as,如:


select a.appname from appinfo a;-- 正确

select a.appname from appinfo as a;-- 错误

也许,是怕和oracle中的存储过程中的关键字as冲突的问题吧


2.在存储过程中,select某一字段时,后面必须紧跟into,如果select整个记录,利用游标的话就另当别论了。


select af.keynode into kn from APPFOUNDATION af where af.appid=aid and af.foundationid=fid;-- 有into,正确编译

select af.keynode from APPFOUNDATION af where af.appid=aid and af.foundationid=fid;-- 没有into,编译报错,提示:Compilation

Error: PLS-00428: an INTO clause is expected in this Select statement

 

3.在利用select...into...语法时,必须先确保数据库中有该条记录,否则会报出"no data found"异常。


可以在该语法之前,先利用select count(*) from 查看数据库中是否存在该记录,如果存在,再利用select...into...


4.在存储过程中,别名不能和字段名称相同,否则虽然编译可以通过,但在运行阶段会报错


select keynode into kn from APPFOUNDATION where appid=aid and foundationid=fid;-- 正确运行

select af.keynode into kn from APPFOUNDATION af where af.appid=appid and af.foundationid=foundationid;-- 运行阶段报错,提示

orA-01422:exact fetch returns more than requested number of rows

5.在存储过程中,关于出现null的问题


假设有一个表A,定义如下:

create table A(

id varchar2(50) primary key not null,

vcount number(8) not null,

bid varchar2(50) not null -- 外键

);如果在存储过程中,使用如下语句:

select sum(vcount) into fcount from A where bid='xxxxxx';如果A表中不存在bid="xxxxxx"的记录,则fcount=null(即使fcount定义时设置了默认值,如:fcount number(8):=0依然无效,fcount还是会变成null),这样以后使用fcount时就可能有问题,所以在这里最好先判断一下:

if fcount is null then

fcount:=0;

end if;这样就一切ok了。


6.Hibernate调用oracle存储过程


this.pnumberManager.getHibernateTemplate().execute(

new HibernateCallback() ...{

public Object doInHibernate(Session session)

throws HibernateException, SQLException ...{

CallableStatement cs = session

.connection()

.prepareCall("{call modifyapppnumber_remain(?)}");

cs.setString(1, foundationid);

cs.execute();

return null;

}

});

上一篇:为什么Oracle中只能用sys和system登录 人气:792
下一篇:实例讲解Oracle数据库自动增加ID的sql 人气:735
浏览全部Oracle的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐