在PL/SQL中定义一个Varchar2 变量strSQL,赋了约1000多字符串SQL,准备用EXECUTE IMMEDIATE strSQL 执行,在Toad中调试,结果还没执行strSQL 成了未定义了,请那位大虾帮看一下是啥原因
我把EXECUTE IMMEDIATE strSQL 注释掉,光 给strSQL 赋一个1000多的字符串也是这样,好像strSQL 在800以内,一切都正常,Varchar2 不是最大长度是4000嘛,为啥还没超长就有问题,是和数据库配置有关吗,oracle是9i

解决方案 »

  1.   

    好像在PL/sql里面archar2的长度不是4000了,药小一些,好像看到有人说过是2000左右,你自己在查查把
      

  2.   

    strSQL 定义为Long 类型,也一样
      

  3.   

    把你的pl/sql块贴出来,应该是你写错了。你试试下面的
    create table t (c1 varchar2(1000))
    /
    declare
      s varchar2(4000);
    begin
      s:='begin
    insert into t(c1) values(''this is line 001aaaaaaaaaaaaaaaaaa'');
    insert into t(c1) values(''this is line 002aaaaaaaaaaaaaaaaaa'');
    insert into t(c1) values(''this is line 003aaaaaaaaaaaaaaaaaa'');
    insert into t(c1) values(''this is line 004aaaaaaaaaaaaaaaaaa'');
    insert into t(c1) values(''this is line 005aaaaaaaaaaaaaaaaaa'');
    insert into t(c1) values(''this is line 006aaaaaaaaaaaaaaaaaa'');
    insert into t(c1) values(''this is line 007aaaaaaaaaaaaaaaaaa'');
    insert into t(c1) values(''this is line 008aaaaaaaaaaaaaaaaaa'');
    insert into t(c1) values(''this is line 009aaaaaaaaaaaaaaaaaa'');
    insert into t(c1) values(''this is line 010aaaaaaaaaaaaaaaaaa'');
    insert into t(c1) values(''this is line 011aaaaaaaaaaaaaaaaaa'');
    insert into t(c1) values(''this is line 012aaaaaaaaaaaaaaaaaa'');
    insert into t(c1) values(''this is line 013aaaaaaaaaaaaaaaaaa'');
    insert into t(c1) values(''this is line 014aaaaaaaaaaaaaaaaaa'');
    insert into t(c1) values(''this is line 015aaaaaaaaaaaaaaaaaa'');
    insert into t(c1) values(''this is line 016aaaaaaaaaaaaaaaaaa'');
    insert into t(c1) values(''this is line 017aaaaaaaaaaaaaaaaaa'');
    insert into t(c1) values(''this is line 018aaaaaaaaaaaaaaaaaa'');
    insert into t(c1) values(''this is line 019aaaaaaaaaaaaaaaaaa'');
    insert into t(c1) values(''this is line 020aaaaaaaaaaaaaaaaaa'');
    commit;
    end;';
      execute immediate s;
    end;
    /
      

  4.   

    PROCEDURE PROC1(STRD IN VARCHAR2, ITAG OUT INT, MSG OUT VARCHAR2)
    ISSTRSQL varchar2(4000);
    BEGINstrSQL:='UPDATE T_PM_UMTOTAL_PLAN_INDE M'
    ||' SET (M_9, M_10, M_11, M_12) = '
    ||' (SELECT M_9, M_10, M_11, M_12 '
    ||' FROM (SELECT A.UNIT_NUM, A.VAR_NUM, (INDE_VALUE - SUM_M) * M_9 / SUM_R AS M_9, (INDE_VALUE - SUM_M) * M_10 / SUM_R AS M_10, '
    ......
    ||' WHERE PLAN_TYPE_NUM = 001 AND YEAR_INDE = 2005 AND M.INDE_MOTH = 08';EXECUTE IMMEDIATE STRSQL;
    end;我 把 strSQL 删短点,在EXECUTE IMMEDIATE STRSQL处 设短点;STRSQL可以看到正确值,长了就不行
      

  5.   

    PL/SQL中的Varchar2变量最大长度可以到65535的,只是表结构定义中的Varchar2才是4000长度限制。
      

  6.   

    基本同意zlowly(zlowly),我记得pl_sql的varchar2的最大长度为32k