【发布时间】:2019-11-17 03:27:28
【问题描述】:
我正在尝试使用 OUT 变量发送 SQL 结果,但收到“ORA-06502: PL/SQL: numeric or value error: string buffer too small”错误,我尝试将 o_sql 从 varchar2 更改为 nvarchar2但仍然有问题,似乎也无法在输入/输出部分将其定义为 varchar2(10000)。 在第一部分,我从 i_In 和 o_sql + o_file 收到了程序调用者的时间,我也删除了异常部分 bcz 没有任何问题。
CREATE OR REPLACE PROCEDURE P_C_CCT_QADATA(i_In in varchar2,
o_sql out nvarchar2, --in here i try to change it to varchar2(1000)
--but not working and
o_File out varchar2
)
AS
v_date DATE;
v_ERRCODE T_C_CCT_RESULTMSG.code%TYPE;
v_ERRMSG T_C_CCT_RESULTMSG.MESSAGE%TYPE;
v_month varchar(2);
Begin
v_date := TO_DATE(i_In,'YYYYMMDDHH24MISS');
select to_char(sysdate, 'MM') into v_month from dual;
o_sql := 'select t.SERIALNO,
t.CONTACTID,
t.CONTACTCHANNELID,
t.CONTACTCHANNELNAME,
t.CONTACTMODEID,
t.CONTACTMODENAME,
t.SUBCCNO,
t.VDNID,
t.HOSTEDCCID,
t.CALLID,
t.CALLTYPE,
t.LANGUAGETYPEID,
t.LANGUAGETYPENAME,
t.CALLSKILLID,
t.CALLSKILLDESC,
t.CALLERNO,
t.CALLEDNO,
t.SUBSNUMBER,
t.ORGCALLERNO,
t.ORGCALLEDNO,
t.MEDIATYPEID,
t.MEDIATYPENAME,
t.CALLSTARTTIME,
t.CALLDURATION,
t.STAFFID,
t.CUSTCITYID,
t.SERVICECITYID,
t.STAFFCITYID,
t.SUBSCITYID,
t.SUBSNAME,
t.SUBSLEVELID,
t.SUBSLEVELNAME,
t.SUBSBRANDID,
t.SUBSBRANDNAME,
t.SUBSPHONE1,
t.SUBSPHONE2,
t.SUBSFAXNO,
t.SUBSEMAIL,
t.SUBSADDRESS,
t.CUSTID,
t.CUSTNAME,
t.CUSTLEVELID,
t.CUSTLEVELNAME,
t.CUSTBRANDID,
t.CUSTBRANDNAME,
t.CUSTPHONE1,
t.CUSTPHONE2,
t.CUSTFAXNO,
t.CUSTEMAIL,
t.CUSTADDRESS,
t.LINKMODE,
t.LINKMAN,
t.LINKINFO,
t.LINKADDRESS,
t.REMARK,
t.CONTACTSTARTTIME,
t.CONTACTDURATION,
t.PLAYRECORDFLAG,
t.QCFLAG,
t.EVTERID,
t.HAVESERVICEFLAG,
t.INTERCEPTFLAG,
t.STAFFHANGUP,
t.SURVEYTYPEID,
t.USERSATISFY,
t.SATISFYFILEPATH,
t.LISTENFLAG,
t.INNERHELPFLAG,
t.PICKUPSTAFFID,
t.MAINCONTACTFLAG,
t.CALLTRACK,
t.DIGITCODE,
t.EXPFLAG,
t.HASRECORDFILE,
t.ISPROCESSED,
t.TENANTID,
b.FILENAME
from T_CCT_CONTACTDETAIL t, trecordinfo'||v_month||'@icddb b
where b.CALLID = t.CALLID
and t.CALLSTARTTIME > (sysdate- 8/24)
and t.CALLSTARTTIME <= (sysdate- 2/24))';
o_file := 'CONTACTDETAIL' || TO_CHAR(v_date, 'YYYYMMDDHH');
END P_C_CCT_QADATA;
【问题讨论】:
-
下面是过程的定义: CREATE OR REPLACE PROCEDURE P_C_CCT_QADATA(i_In in varchar2, o_sql out nvarchar2, --in here I try to change it to varchar2(1000) --but not working and o_File out varchar2 )
-
你能贴出调用过程
P_C_CCT_QADATA的代码吗? -
@Abra 它只发送格式为 yyyymmddhhmmss 的字符,然后我会将其转换为日期。
标签: oracle stored-procedures plsql procedure