Heim > Datenbank > MySQL-Tutorial > 分析根据包名建Oracle存储过程时遇到的错务故障排除

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2016-06-07 16:56:47
Original
972 Leute haben es durchsucht

哦,平常建存储过程时,阿堂就是直接用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存储过程时遇到的错务故障排除



建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

Verwandte Etiketten:
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage