JS调用oracle存储过程不成功【返回的是游标】,在模板数据集是可以调用成功的

image.png

=== 过程如下

CREATE OR REPLACE procedure sp_upt_t30check(in_sWhere In Varchar2,in_sValue In Varchar2,out_rep Out SYS_REFCURSOR) Is

  l_sWhere Varchar2(2000);

  l_sValue Varchar2(2000);

  ls_gcode Varchar2(2000);

  ls_gcode_chk Varchar2(2000);

  v_gcode_code Varchar2(2000);

  v_gcode_chk Varchar2(2000);

  l_sql Varchar2(2000);

  l_sql_temp Varchar2(2000);

  l_conf_type Varchar2(20);

  lt_where ENJOY_OTHERSREP.TT_WHERE;

  i Integer :=1;

  j Integer;

  C_rep   SYS_REFCURSOR;

begin

--   SET NOCOUNT ON;

  l_sWhere := in_sWhere;

  l_sValue := in_sValue;

  -- 循环依次取where条件字段和条件值,存到自增长表:lt_where

  While instr(l_sWhere,';') > 0 Loop

     lt_where(i).F_COL := substr(l_sWhere,1,instr(l_sWhere,';')-1);

     lt_where(i).F_VAL := substr(l_sValue,1,instr(l_sValue,';')-1);

     If lt_where(i).F_COL = 'C_GCODE' Then

        ls_gcode := lt_where(i).F_VAL;

     Elsif lt_where(i).F_COL = 'C_CONF_TYPE' Then

        l_conf_type := lt_where(i).F_VAL;

     Elsif lt_where(i).F_COL = 'C_IST30' Then

        ls_gcode_chk := lt_where(i).F_VAL;

     End If;

     i := i + 1;

     -- 去掉取过的字段

     l_sWhere := substr(l_sWhere,instr(l_sWhere,';')+1);

     l_sValue := substr(l_sValue,instr(l_sValue,';')+1);

  End Loop;

  lt_where(i).F_COL := l_sWhere;

  lt_where(i).F_VAL := l_sValue;

  

  l_sql := 'update md_t30_list set C_IST30 = ''#ls_gcode_chk#'' where c_conf_type = '''||l_conf_type||'''';

  FOR j In 1 .. i Loop

     If lt_where(j).F_COL = 'C_STORE_AREA' And l_conf_type = '02' --区域

        Or lt_where(j).F_COL = 'C_STORE_ID' And l_conf_type In ('03','08','09','10','11') --门店

        Or lt_where(j).F_COL = 'C_SADNO' And l_conf_type In ('04','08')  --S部门

        Or lt_where(j).F_COL = 'C_SADNO' And l_conf_type In ('05','09')  --部门

        Or lt_where(j).F_COL = 'C_SADNO' And l_conf_type In ('06','10')  --部类

        Or lt_where(j).F_COL = 'C_SADNO' And l_conf_type In ('07','11') Then  --课类

        l_sWhere := l_sWhere||';'||lt_where(j).F_COL;

        l_sValue := l_sValue||';'||lt_where(j).F_VAL;

        l_sql := l_sql||' and '||lt_where(j).F_COL||' = '''||lt_where(j).F_VAL||'''';

     End If;

  End Loop;

  

  l_sql := l_sql ||' and c_gcode = ''#ls_gcode_code#''';

  

  While instr(ls_gcode,',') > 0 Loop

     v_gcode_code := substr(ls_gcode,1,instr(ls_gcode,';')-1);

     v_gcode_chk := substr(ls_gcode_chk,1,instr(ls_gcode_chk,';')-1);

     l_sql_temp := Replace(l_sql,'#ls_gcode_chk#',v_gcode_chk);

     l_sql_temp := Replace(l_sql_temp,'#ls_gcode_code#',v_gcode_code);

     Execute Immediate l_sql_temp;

     -- 去掉取过的字段

     ls_gcode := substr(ls_gcode,instr(ls_gcode,',')+1);

     ls_gcode_chk := substr(ls_gcode_chk,instr(ls_gcode_chk,',')+1);

  End Loop;

        

  l_sql_temp := Replace(l_sql,'#ls_gcode_chk#',ls_gcode_chk);

  l_sql_temp := Replace(l_sql_temp,'#ls_gcode_code#',ls_gcode);

  Execute Immediate l_sql_temp;

  OPEN C_rep FOR 'select 1 rtn from dual';

  out_rep := C_rep;

  Commit;

Exception When Others Then

  OPEN C_rep FOR 'select -1 rtn from dual';

  out_rep := C_rep;

end sp_upt_t30check;

FineReport beluga 发布于 2022-4-18 13:48 (编辑于 2022-4-18 17:23)
1min目标场景问卷 立即参与
回答问题
悬赏:20 F币 4人赏过 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共1回答
最佳回答
0
belugaLv6初级互助
发布于2022-8-2 10:31

表名给错了

  • 0关注人数
  • 498浏览人数
  • 最后回答于:2022-8-2 10:31
    请选择关闭问题的原因
    确定 取消
    返回顶部