if substr(x_company,7,2)=10 then
         insert into 表b y (b_id,b_values) values ('&x_id','000001');
     elseif substr(x_company,7,2)>10 and substr(x_company,7,2)<30 then   
         insert into 表b y (b_id,b_values) values ('&x_id','000002');
     elseif substr(x_company,7,2)=30 then   
         insert into 表b (b_id,b_values) values ('&x_id','000003');         
     end if ;end if 后面有个分号

解决方案 »

  1.   

    else if 中间是否应该有空格insert into语句 中的变量值是否要加&上边001%的那段。应为有很多数据。有的时候是002,还有003
    那么每次我都要改这个过程,有没有更好的方法
      

  2.   

    else if 中间是否应该有空格 
    --不应该有空各insert into语句 中的变量值是否要加&
    --直接写变量名字就可以(&是什么语法阿)
      

  3.   

    上边001%的那段。应为有很多数据。有的时候是002,还有003
    那么每次我都要改这个过程,有没有更好的方法--
    可以用游标变量测试
    declaretype rc is ref cursor;
    v_rc rc;
    p_a varchar2(20);
    v_rec b_stores%rowtype;
    begin
    p_a:='1';
    open v_rc for select * from b_stores where store_id like '1'|| p_a ||'%';
    loop
    fetch v_rc into v_rec;
    exit when v_rc%notfound;
    dbms_output.put_line(v_rec.store_id);
    end loop; 
    end;
    --结果
    11
    110
    1100
    1101
    1102
    1103
    1104
    1105
    1106
    1107
    1108
    1109
    111
    1110
    1111
    1112
    1113
    1114
    1115
    1116
    1117
    1118
    1119
    112
    1120
    1121
    1122
    1123
    1124
    1125
    1126
    1127
    1128
    1129
    113
    1130
    1131
    1132
    1133
    1134
    1135
    1136
    1137
    1138
    1139
    114
    1140
    1141
    1142
    1143
    1144
    1145
    1146
    1147
    1148
    1149
    115
    1150
    1151
    1152
    1153
    1154
    1155
    1156
    1157
    1158
    1159
    116
    1160
    1161
    1162
    1163
    1164
    1165
    1166
    1167
    1168
    1169
    117
    1170
    1171
    1172
    1173
    1174
    1175
    1176
    1177
    1178
    1179
    118
    1180
    1181
    1182
    1183
    1184
    1185
    1186
    1187
    1188
    1189
    119
    1190
    1191
    1192
    1193
    1194
    1195
    1196
    1197
    1198
    1199
      

  4.   

    也可以用for循环
    declare
    p_a varchar2(20);
    begin
    p_a:='1';
    for v_rc in (select * from b_stores where store_id like '1'|| p_a ||'%')
    loopdbms_output.put_line(v_rc.store_id);
    end loop; 
    end;--结果与上相同
      

  5.   

    直接写变量名?  
    ??
    ??
    .....values ('x_id','000002');这个样子吗?
    还有一个事情,其中有好多if和elseif 是否能换成case ,可以提高性能吗?
      

  6.   

    insert into ...
    values(x_id,'000002')
      

  7.   

    还有一个事情,其中有好多if和elseif 是否能换成case --看到你的另外的帖子,是可以用case的
    不过效率我就不知道了
    我没有大的大数据量下测试过
    lz到可以自己测试一下
      

  8.   

    是字符串啊,不用加 ‘’吗?--x_id本身就是字符串阿
      'x_id' 就变成了插入 'x_id' 而不是x_id变量的值了
      

  9.   

    回复 :冰可能是我没说明白,上边的那个是简单写的,实际上在每个 elseif 中有好多判断(and 和 or 形式的),根据判断然后不一定要在 表b中插入几条记录。上边的那个case不知道可以满足吗?谢谢