分析根据包名建Oracle存储过程时遇到的错务故障排除

php中文网
发布: 2016-06-07 16:56:47
原创
1145人浏览过

哦,平常建存储过程时,阿堂就是直接用ldquo;create or replace procedure 存储过程名rdquo; 这样的形式来建的,没遇到什么问题

哦,平常建存储过程时,阿堂就是直接用“create or replace procedure 存储过程名” 这样的形式来建的,没遇到什么问题,这不,这两天在项目中尝试用包的形式,建存储过程时就遇到了实际问题,在PL/SQL中运行命令后,没有什么编译错务。。运行完毕,再在pl/sql中看时,就会一个该包上有一个红色的x,晕了。。要看上面的错误提示,,是出现在下面建 create or replace package body display_users_package is时,在create上报错。一看,关健字书写没错误啊。。其实,后來找到原因后,回个头来思考,上面这个提示是非常正确的。(其意思就是告诉我们,建包时,下面不能把建包body的命令放在一起运行的,言外之意,就是要删除中间开始的从create or replace package body display_users_package is 到后面的所有语句,即可)

分析根据包名建Oracle存储过程时遇到的错务故障排除

这里,要感谢部门同事"木生"了,是他帮忙找到的错误原因了
  在网上的文章介绍,建包,包主体,及存储过程时,代码都全放在一起了,基本上没有什么说明,所以,一般人就以为这些命令是一起在运行了。。

我运行代码时报错时,完整代码如下
  create or replace package xinfei_ims.display_users_package is
    type search_results is ref cursor;
    procedure display_users_proc(results_out out search_results,userId in test_users.user_id%type);
  end display_users_package;

  create or replace package body display_users_package is
  procedure display_users_proc(results_out out search_results, userId in test_users.user_id%type) is
    begin
    if userId is not null then
      open results_out for select * from test_users where user_id like userId||'%';
    else
     open results_out for select * from test_users;
    end if;
  end display_users_proc;
  end display_users_package;

 

  事实,“运行建包”和“运行建包主体”的命令是要分开的。。为什么这样说,其实,仔细看PL/SQL中左边的菜单就可以看出,Oracle中 PACKAGE和PACKAGE BOYIES是分开的,从下面图示中就可以看出

分析根据包名建Oracle存储过程时遇到的错务故障排除



Canva
Canva

使用Canva可画,轻松创建专业设计

Canva 2603
查看详情 Canva

建PACKAGE
create or replace package display_users_package is
  type search_results is ref cursor;
  procedure display_users_proc(results_out out search_results,
                               userId      in test_users.user_id%type);
end display_users_package;

分析根据包名建Oracle存储过程时遇到的错务故障排除

 

建PACKAGE BODY
  create or replace package body display_users_package is
  procedure display_users_proc(results_out out search_results, userId in test_users.user_id%type) is
    begin
    if userId is not null then
      open results_out for select * from test_users where user_id like userId||'%';
    else
     open results_out for select * from test_users;
    end if;
  end display_users_proc;
  end display_users_package;

分析根据包名建Oracle存储过程时遇到的错务故障排除

 

 在JAVA中建用这样含有包的存储过程时,用如下形式
 包名.存储过程名 
  CallableStatement cs = null;   
  cs = conn.prepareCall("call display_users_package.display_users_proc(?,?)");   
  cs.registerOutParameter (1, OracleTypes.CURSOR);   
  cs.setObject(2, params); 

linux

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号