存储过程中动态拼接sql,拼接单引号问题

本文介绍了一个Oracle存储过程`mergerOrder`,该过程动态拼接SQL查询语句来处理传入的参数。当`v_ids`、`v_productCode`或`v_productCateCode`不为空时,会在查询条件中添加相应的过滤。在拼接字符串时,特别处理了单引号以避免SQL注入问题。存储过程最后打开游标执行SQL并打印结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


create or replace procedure mergerOrder(
      v_ids in varchar2,
      v_productCode in varchar2,
      v_productCateCode in varchar2) is
      type cur_type is ref cursor;
      cur_policy cur_type;

      rec_policy ecc_pln.order_detail2%rowtype;
      sqlStr varchar2(500);

begin
       sqlStr := 'select id ,order_number from ecc_pln.order_detail2 d where 1=1';
         if v_ids is not null then
           sqlStr := sqlStr || ' and d.id in( SELECT COLUMN_VALUE FROM TABLE(jomoo_oms.SPLIT('''||v_ids||''')))';
         end if;
         if v_productCode is not null then
           sqlStr := sqlStr || ' and d.material_code='''|| v_productCode||'''';
         end if;
         if v_productCateCode is not null then
           sqlStr := sqlStr || ' and d.product_ca_code=''' || v_productCateCode||'''' ;
         end if;
       Dbms_Output.put_line('sqlStr: '||sqlStr);

     open cur_policy for sqlStr;
         loop
          fetch cur_policy into rec_policy.id, rec_policy.order_number;
             exit when cur_policy%notfound;

         Dbms_Output.put_line('id:'||rec_policy.id|| ' order_number:'||rec_policy.order_number);

        end loop;
     close cur_policy;
end mergerOrder;


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值