Plsql ORA-06502测试现有值时出错

Plsql ORA-06502测试现有值时出错,plsql,oracle11g,oracle-sqldeveloper,Plsql,Oracle11g,Oracle Sqldeveloper,这是我发送的过程和错误值,它与表中已经存在的值完全相同(没有依赖项)。不确定它抛出错误的原因 create or replace PROCEDURE TEST (email_address in VARCHAR2, CatItype in VARCHAR2, opt_status in CHAR,userIns in VARCHAR2, editstat out VARCHAR2) AS eid EMAILDATA.EMAIL_ID%TYPE; eid1 EMAILDATA.EM

这是我发送的过程和错误值,它与表中已经存在的值完全相同(没有依赖项)。不确定它抛出错误的原因

 create or replace PROCEDURE TEST (email_address in VARCHAR2, 
 CatItype in VARCHAR2, opt_status in CHAR,userIns in VARCHAR2,
 editstat out VARCHAR2) 
 AS
 eid EMAILDATA.EMAIL_ID%TYPE;
 eid1 EMAILDATA.EMAIL_ID%TYPE;
 cid EMAILDATA.category_id%TYPE;
 cname EMAILDATA.CATEGORY_NAME%TYPE;
 pref EMAILDATA.PREFERENCE%TYPE;

 Email_val EMAILDATA.EMAIL_ADDRESS%TYPE := email_address;
 CatIntType EMAILDATA.INTER_CONTACTTYPE%TYPE := CatItype;
 usrins EMAILDATA.USER_INSERTING%TYPE := userIns;
 ostat EMAILDATA.PREFERENCE%TYPE := opt_status;
 error_flag BOOLEAN ;

  Error
  ORA-06502: PL/SQL: numeric or value error: character string buffer too small
  ORA-06512: at "TEST", line 19
  ORA-06512: at line 13

我想问题在这里:
usrins EMAILDATA.USER\u插入%TYPE:=userIns

SQL中VARCHAR2的最大长度(表类型)=4000个字符

PL/SQL中的最大长度为32767

USER\u INSERTING是表EMAILDATA中的一列。我想它是VARCHAR2型的。在这种情况下,此变量的最大字符数限制为4000(取决于DDL)


userIns是一个PL/SQL VARCHAR2变量,最多可包含32767个字符

userins列是varchar2(50字节)。试图更改VARCHAR2(50)
中的
userIns,但给出的错误为**错误(6,21):PLS-00103:遇到符号“((当需要下列之一时:=),@%默认字符符号“:=”被替换为“(”若要继续。**@SMITH,您无法在过程定义中设置VARCHAR2的长度。您想实现什么?有人使用长userIns调用了您的过程,因此发生了错误。我认为这是自然的。作为一种变体,您可以忽略其余的userIns:usrins EMAILDATA。用户\u插入%TYPE:=substr(userIns,1,50)@SMITH在这种情况下,该过程将起作用,但您永远不会知道是否有人输入了错误的数据