shell脚本调用oracle存储过程显示:06502字符串缓冲区太小。错误问题

MZDK777 2017-11-24 10:16:02


以上问题是我用shell脚本调用oracle数据库处处过程运行后结果,具体为通过存储过程向数据库表中插数,虽然显示以上错误,但插数操作还是成功了,请大神帮忙解决。
...全文
716 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
碧水幽幽泉 2017-11-24
  • 打赏
  • 举报
回复
你的问题出在out2的定义上。 后面的varchar2改成varchar2(100)
碧水幽幽泉 2017-11-24
  • 打赏
  • 举报
回复
改成我的方法,格式都正确,调用应该没问题。
MZDK777 2017-11-24
  • 打赏
  • 举报
回复
这是xsx26.sh中的程序,你是说要把调用存储过程改成你那样的格式吗? 以我给出的格式都能够在sqlplus和pl/sql dev中执行成功的, 只在shell调用就有这问题,现在系统修复,我待会再试试你的办法。
MZDK777 2017-11-24
  • 打赏
  • 举报
回复
#!/bin/bash sqlplus -silent /nolog <<END conn oda/oda@CASDB; set pagesize 0 feedback off linesize 4000 verify off heading off echo off numwidth 10; var out1 number; var out2 varchar2; exec PRC_TWO_LOOP(2,3,:out1,:out2) commit; exit; END;
碧水幽幽泉 2017-11-24
  • 打赏
  • 举报
回复
xsx26.sh中存储过程的调用需要改成:

BEGIN
PRC_TWO_LOOP(2,3,0,NULL);
END;
碧水幽幽泉 2017-11-24
  • 打赏
  • 举报
回复
xsx26.sh中存储过程的调用需要改成:
[/code=sql]
BEGIN
PRC_TWO_LOOP(2,3,0,NULL);
END;
[/code]
碧水幽幽泉 2017-11-24
  • 打赏
  • 举报
回复
是不是xsx26.sh还有其他SQL代码?
MZDK777 2017-11-24
  • 打赏
  • 举报
回复
有一个问题就是,这些在sqlplus和pl/sql dev上执行都是没问题的,只是在shell脚本调用的时候会有这报错,但最后还是能插数成功,也就是说不影响执行结果。
碧水幽幽泉 2017-11-24
  • 打赏
  • 举报
回复
引用 11 楼 MZDK777的回复:
好吧。。。。不好意思,那就只能这么沟通了,你是说去掉变量v_1st和v_2nd?
嗯,是的!不过我本地测试你的脚本,没报错呀。
MZDK777 2017-11-24
  • 打赏
  • 举报
回复
-- Create table create table AA_TWO_LOOP ( batch_time DATE, cycle_type VARCHAR2(20), first_cycle_num NUMBER(10), second_cycle_num NUMBER(10), cycle_time DATE )
MZDK777 2017-11-24
  • 打赏
  • 举报
回复
CREATE OR REPLACE PROCEDURE prc_two_loop( i_1st_cycle_num IN NUMBER, i_2nd_cycle_num IN NUMBER, retcode OUT NUMBER, errbuf OUT VARCHAR2) IS v_1st_cycle_num NUMBER(20); v_2nd_cycle_num NUMBER(20); v_time date; BEGIN v_time := sysdate; -- 第一次循环 FOR v_1st_cycle_num IN 1 .. i_1st_cycle_num LOOP INSERT INTO AA_TWO_LOOP VALUES (v_time,'01_cycle', v_1st_cycle_num, null, sysdate); -- 第二次循环 FOR v_2nd_cycle_num IN 1 .. i_2nd_cycle_num LOOP INSERT INTO AA_TWO_LOOP VALUES (v_time,'02_cycle', v_1st_cycle_num, v_2nd_cycle_num, sysdate); end LOOP; commit; end LOOP; commit; retcode := 0; errbuf := '执行成功!'; EXCEPTION WHEN OTHERS THEN retcode := -1; errbuf := substr (sqlerrm, 1, 100); rollback; END;
MZDK777 2017-11-24
  • 打赏
  • 举报
回复
好吧。。。。不好意思,那就只能这么沟通了,你是说去掉变量v_1st和v_2nd?
碧水幽幽泉 2017-11-24
  • 打赏
  • 举报
回复
你把存储过程贴出来,和建表语句贴出来,不要截图。我这边可以测试
碧水幽幽泉 2017-11-24
  • 打赏
  • 举报
回复
因为保密需要,公司限制了网络,不能登QQ哦。
MZDK777 2017-11-24
  • 打赏
  • 举报
回复
大神,我能直接加你QQ吗?
碧水幽幽泉 2017-11-24
  • 打赏
  • 举报
回复
去掉v_1st和v_2nd的声明,再执行下看看。
MZDK777 2017-11-24
  • 打赏
  • 举报
回复
我测试的时候就输入的2和3。。。
碧水幽幽泉 2017-11-24
  • 打赏
  • 举报
回复
i_1st_cycle_num和i_2nd_cycle_num长度有多长?
MZDK777 2017-11-24
  • 打赏
  • 举报
回复
MZDK777 2017-11-24
  • 打赏
  • 举报
回复
加载更多回复(3)

17,089

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧