maj*_*idi 1 oracle plsql stored-procedures procedure
我正在尝试使用 OUT 变量发送 SQL 结果,但收到“ORA-06502:PL/SQL:数字或值错误:字符串缓冲区太小”错误,我尝试将 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;
Run Code Online (Sandbox Code Playgroud)
--在这里我尝试将其更改为 varchar2(1000)
--但不起作用
PL/SQL 参数没有长度限制。所以varchar2(1000)不会作为参数定义进行编译。
问题在于调用此过程时分配给变量的大小o_sql。它需要足够大才能容纳绳子。您的字符串长度约为 1330 个字符,这意味着varchar2(1000)对于您的需求来说太短了。
尝试类似的方法:
declare
l_sql nvarchar2(1600); -- big enough to hold teh output value!
l_file varchar2(32);
begin
P_C_CCT_QADATA(i_In => 'whatever',
o_sql => l_sql,
o_File => l_file);
end;
/
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16756 次 |
| 最近记录: |