问题1:是因为你程序就这么写的啊,
   if cha<70 then
  su:=substr(sms,i,70);
比如 nu = 100, 当i=31的时候才会执行(su:=substr(sms,i,70);),对吧
那么这个时候你看到的效果就是从i处直接输出到字符串结尾了。不知道我这么说你能不能明白问题2:可以把sms作为存储过程的参数,这样就可以了。希望对你有帮助。

解决方案 »

  1.   

    1.同楼上,你的if else控制始终会让i+70>nu时才能执行su:=substr(sms,i,70),必然会输出到字符串尾
    2.如果你只是做读取与输入测试,那么用&即可读取键盘输入
    例如:sms:=&请输入输入时如果接收者为varchar2类型,输入的值前后记得加上单引号
      

  2.   

    恩,第一个问题是我没注意,已经解决了。谢谢,第二个我还不太懂,你的意思是用&吗?但我用这个总是报错
      

  3.   


    我将 sms VARCHAR(3999);改成sms VARCHAR(3999):=&sms;:=&sms;系统会报错。如下
    ORA-06550: 第 5 行, 第 21 列: 
    PLS-00103: 出现符号 "&"在需要下列之一时:
     ( - + case mod new not null
       <an identifier> <a double-quoted delimited-identifier>
       <a bind variable> avg count current exists max min prior sql
       stddev sum variance execute forall merge time timestamp
       interval date
       <a string literal with character set specification>
       <a number> <a single-quoted SQL string> pipe
       <一个带有字符集说明的可带引号的字符串文字>
       <一个可带引号的 SQL 字符串>
    符号 "&" 被忽略。我一直不知道怎么该怎么该这句,网上也没有找到,辛苦了,谢谢。
      

  4.   


    不好意思,我改后的结果是sms VARCHAR(3999):=&sms;  这样的,结果运行系统会报错,我不太清楚该怎么该。
      

  5.   

    declare 
     sms VARCHAR(3999);begin
         sms:=&请输入字符串;
         --这个就可以弹出输入对话框  提示你输入  输入值(即替换变量)会直接赋值给sms
    end
      

  6.   

    切记替换变量会直接赋值给sms,所以若想输入字符串,输入格式如: '马航失踪'
      

  7.   

     begin
      
      sms:=&sms; 
      nu:=length(sms);
     while i<nu loop

    改成这样,还是报错ORA-06550: 第 12 行, 第 8 列: 
    PLS-00103: 出现符号 "&"在需要下列之一时:
     ( - + case mod new not null
       <an identifier> <a double-quoted delimited-identifier>
       <a bind variable> avg count current exists max min prior sql
       stddev sum variance execute forall merge time timestamp
       interval date
       <a string literal with character set specification>
       <a number> <a single-quoted SQL string> pipe
       <一个带有字符集说明的可带引号的字符串文字>
       <一个可带引号的 SQL 字符串>
    符号 "-在 "&" 继续之前已插入。ps:12行第8列就是&sms的&处,不知道怎么错了,要崩溃了
      

  8.   


    declare 
      nu number(5);
      smsms varchar(3999);
     sms VARCHAR(3999);
     su varchar2(999);
     i number(4):=1;
     n number(2):=0;
    cha number(3);begin
      sms:=&请输入;
      nu:=length(sms);
     while i<nu loop
       cha:=nu-i;
       if cha<70 then
     su:=substr(sms,i,70);
       dbms_output.put_line('output SMS: '||su);
       n:=n+1;
    else
        su:=substr(sms,i);
       dbms_output.put_line('output SMS: '||su);
         end if;
    i:=i+70;
         end loop;
      dbms_output.put_line('the sms length is: '||nu);
    end;
    &后面只是作提示作用的语句
      

  9.   

    你这程序我直接粘在PL/SQL developer里还是报错,还是那个错误,是我软件的问题吗?
      

  10.   

    我复制到的plsql develop 的test window中就不行,不知道为什么
      

  11.   

    问题都解决了,谢谢rihyou和zuorxk_wl的回复,尤其是zuorxk,刚刚接触,很多问题都很低级,谢谢你的耐心解答。劳驾二位了。结贴结贴