Я пытаюсь использовать переменную 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;