问题1:是因为你程序就这么写的啊,
if cha<70 then
su:=substr(sms,i,70);
比如 nu = 100, 当i=31的时候才会执行(su:=substr(sms,i,70);),对吧
那么这个时候你看到的效果就是从i处直接输出到字符串结尾了。不知道我这么说你能不能明白问题2:可以把sms作为存储过程的参数,这样就可以了。希望对你有帮助。
if cha<70 then
su:=substr(sms,i,70);
比如 nu = 100, 当i=31的时候才会执行(su:=substr(sms,i,70);),对吧
那么这个时候你看到的效果就是从i处直接输出到字符串结尾了。不知道我这么说你能不能明白问题2:可以把sms作为存储过程的参数,这样就可以了。希望对你有帮助。
2.如果你只是做读取与输入测试,那么用&即可读取键盘输入
例如:sms:=&请输入输入时如果接收者为varchar2类型,输入的值前后记得加上单引号
我将 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 字符串>
符号 "&" 被忽略。我一直不知道怎么该怎么该这句,网上也没有找到,辛苦了,谢谢。
不好意思,我改后的结果是sms VARCHAR(3999):=&sms; 这样的,结果运行系统会报错,我不太清楚该怎么该。
sms VARCHAR(3999);begin
sms:=&请输入字符串;
--这个就可以弹出输入对话框 提示你输入 输入值(即替换变量)会直接赋值给sms
end
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的&处,不知道怎么错了,要崩溃了
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;
&后面只是作提示作用的语句