免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5156 | 回复: 2
打印 上一主题 下一主题

[求助] oracle存储过程参数传递问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-06-28 11:01 |只看该作者 |倒序浏览
为什么换了写法就不能输出值了?
过程1:
create or replace procedure pro_sel_totall(v_lingyu in varchar2,v_department in varchar2,n out number) is
begin
  select count(*) into n from xuqiu_201301 t where t.xlingyu=v_lingyu and t.xdepartment=v_department;
end;

过程2:
create or replace procedure pro_tt as
a varchar2(222);
b varchar2(222);
c number;
begin
  a:='信用卡';
  b:='信用卡-信息技术部';
  pro_sel_totall(a,b,c);
  dbms_output.put_line(c);
end;
执行过程2,正确输出结果。

过程3:
create or replace procedure pro_tt2 as
a varchar2(222);
b varchar2(222);
c number;
begin
  select t.xly_name into a from xyewu t where t.xid=27;
  select t.xdep_name into b from xdepartment t where t.xid=10;
  pro_sel_totall(a,b,c);
  dbms_output.put_line(c);
end;
上面两个sql语句,得到的a和b的值,是跟过程2的一样的,只是换种形式,执行过程3,显示却是0,为什么啊?

跪等大神解答!!!

论坛徽章:
0
2 [报告]
发表于 2013-06-28 12:42 |只看该作者
http://zhidao.baidu.com/question ... o#answer-1412219232   
还是百度给力,已解决。

论坛徽章:
0
3 [报告]
发表于 2013-06-28 12:51 |只看该作者
本帖最后由 linux_kaige 于 2013-06-28 16:54 编辑

原过程如下,只因为字段长度不一致,测试错误了。

create or replace procedure pro_cursor_cao as
j number;
n number;
v_name1 xyewu.xly_name%type;
v_name2 xdepartment.xdep_name%type;
cursor cur_yewu is select t.xly_name from xyewu t;
cursor cur_depart is select t.xdep_name from xdepartment t;
begin
  select count(*) into j from xuqiu_201301;
  dbms_output.put_line(j);---------输出我的任务清单的任务数。
    open cur_yewu;
    loop
      fetch cur_yewu into v_name1;
      exit when cur_yewu%notfound;
      begin
      open cur_depart;
      loop
        fetch cur_depart into v_name2;
        exit when cur_depart%notfound;
        /*select count(*) into n from xuqiu_201301 t where t.xlingyu=v_name1 and t.xdepartment=v_name2;
        if n!=0 then
        dbms_output.put(v_name1||chr(9));
        dbms_output.put(v_name2||chr(9));
        dbms_output.put_line(n||chr(9));
        end if;
       这样可以输出我要的结果
       */
      pro_sel_totall(v_name1,v_name2,n);
      if n!=0 then dbms_output.put_line(v_name1||v_name2||n);end if;
      end loop;
      close cur_depart;
      end;
      dbms_output.put_line('');  
    end loop;
    close cur_yewu;
end;
--http://zhidao.baidu.com/question/309819829.html  参数传递

/*
如何恢复一个“短时间”内被“修改”或“删除”的存储过程  现象描述:某日通过PL/SQL Developer修改qdgl@lyzw下的存储过程LF_HDPT,修改完成后,执行编译,然后关闭脚本修改窗口(在关闭窗口前后都未进行脚本保存)。随后在执行存储过程时发现脚本修改有误,误删除了原有存储过程没有问题的几段代码,而手头电脑又没有备份脚本,问了相关人员也没有备份。那如何恢复脚本呢?  原理分析:oracle里所有的存储过程的源代码都是存在dba_source里,而edit或drop某个存储过程的时候,oracle这里肯定要去dba_source里把相关的源代码给edit或delete掉,并且这些代码都会存储在系统快照中一段时间,那么直接flashback query就可以了
问题处理:鉴于最近一次执行存储过程LF_HDPT的编译时间在“2009-09-23 17:02:00”左右,用sys用户登陆,执行如下的查询:
SELECT TEXT    FROM DBA_SOURCE AS OF TIMESTAMP TO_TIMESTAMP(
'2009-09-23 17:01:00', 'YYYY-MM-DD HH24:MI:SS')  WHERE OWNER = 'QDGL'    AND NAME = 'LF_HDPT'  ORDER
BY LINE;  然后把相应的代码导出到excel,找回需要的代码就行了。
*/
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP