用存储过程编程遇到的小问题
declare
nu number(5);
smsms varchar(3999);
sms VARCHAR(3999):='美国有线电视新闻网(CNN)15日称美情报部门倾向于认为失联客机飞行员对客机失联负有责任,并且其行为有主观故意因素。由于马航信息显示副机长阿卜杜勒?法里克之前并没有特别要求与机长扎哈里?艾哈迈德?沙阿搭班,';
su varchar2(999);
i number(4):=1;
n number(2):=0;
cha number(3);
begin
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;
关于这个程序,有两个问题:1.su:=substr(sms,i,70);无法实现对sms字符串截取70个字符的操作,都是从i处直接输出到字符串结尾了。
2.如果我想实现可以sms的字符串输入该如何操作?
刚刚接触oracle,很多地方还不太理解,请教的问题可能也比较简单,先谢谢各位大神的指教了。
------解决方案--------------------问题1:是因为你程序就这么写的啊,
if cha<70 then
su:=substr(sms,i,70);
比如 nu = 100, 当i=31的时候才会执行(su:=substr(sms,i,70);),对吧
那么这个时候你看到的效果就是从i处直接输出到字符串结尾了。不知道我这么说你能不能明白
问题2:可以把sms作为存储过程的参数,这样就可以了。
希望对你有帮助。
------解决方案--------------------1.同楼上,你的if else控制始终会让i+70>nu时才能执行su:=substr(sms,i,70),必然会输出到字符串尾
2.如果你只是做读取与输入测试,那么用&即可读取键盘输入
例如:sms:=&请输入
输入时如果接收者为varchar2类型,输入的值前后记得加上单引号