• Oracle中动态SQL拼接


    1. 直接用单引号,单引号的使用是就近配对,即就近原则。从第二个单引号开始被视为转义符
    v_sql := ' insert into BJTONGRENTANGTEMPTB select distinct h.sellerid,h.sellercode,h.sellername,h.prodcode,h.prodname from historyofsales_day h '
    ||' where h.sellerid in (select distinct ovalorgid from bjtongrentangpc ) '
    ||' and h.prodcode in (select prodcode from buproduct where bucode= '''||v_bucode||''')'
    ||' and to_char(h.salesdate,''yyyyMM'') =''' || v_year||v_month||'''';
    if v_productcode is not null then
    v_sql := v_sql || ' and h.prodcode = '''||v_productcode||'''';
    end if;
    if v_seller is not null then
    v_sql := v_sql || ' and h.sellername like ''%'||v_seller||'%''';
    end if;
    if v_provincecode is not null then
    v_sql := v_sql || ' and h.buyerprovincecode = '''||v_provincecode||'''';
    end if;
    if v_productspec is not null then
    v_sql := v_sql || ' and h.prodspec like ''%'||v_productspec||'%''';
    end if;
    execute immediate v_sql;
    commit;

    2. 利用chr(39)转义单引号
    v_sql := ' insert into BJTONGRENTANGTEMPTB select distinct h.sellerid,h.sellercode,h.sellername,h.prodcode,h.prodname from historyofsales_day h '
    ||' where h.sellerid in (select distinct ovalorgid from bjtongrentangpc ) '
    ||' and h.prodcode in (select prodcode from buproduct where bucode= '||chr(39)||v_bucode||chr(39)||')'
    ||' and to_char(h.salesdate,''yyyyMM'') =' ||chr(39)|| v_year||v_month||chr(39);
    if v_productcode is not null then
    v_sql := v_sql || ' and h.prodcode = '||chr(39)||v_productcode||chr(39);
    end if;
    if v_seller is not null then
    v_sql := v_sql || ' and h.sellername like '||chr(39)||'%'||v_seller||'%'||chr(39);
    end if;
    if p_provincename is not null then
    v_sql := v_sql || ' and h.buyerprovincename = '||chr(39)||p_provincename||chr(39);
    end if;
    if v_productspec is not null then
    v_sql := v_sql || ' and h.prodspec like '||chr(39)||'%'||v_productspec||'%'||chr(39);
    end if;

    3. 利用execute immediate using占位符语法处理
    v_sql := ' insert into BJTONGRENTANGTEMPTB select distinct h.sellerid,h.sellercode,h.sellername,h.prodcode,h.prodname from historyofsales_day h '
    ||' where h.sellerid in (select distinct ovalorgid from bjtongrentangpc ) '
    ||' and h.prodcode in (select prodcode from buproduct where bucode= :1)'
    --||' and to_char(h.salesdate,''yyyyMM'') =:v2:v3';
    ||' and to_char(h.salesdate,''yyyy'') =:v2';
    --execute immediate v_sql using v_bucode,v_year,v_month; --error ORA-01006:绑定变量不存在
    execute immediate v_sql using v_bucode,v_year;
    commit;


    4. 其他的
    select q'[it's a cat]' from dual;

  • 相关阅读:
    在UNICODE编码格式下, CString 转换为 char* :
    inet_ntop(), inet_pton(), htonl(), ntohl()
    'bool std::operator <(const std::_Tree<_Traits> &,const std::_Tree<_Traits> &)'
    NMAKE:fatal error U1077.“...cl.exe” return code 0xc0000135
    拷贝(复制)构造函数和赋值函数
    GIS 地图中术语解释
    Linux 下防火墙端口设置
    LInux 下安装jdk
    ln 命令
    zip命令
  • 原文地址:https://www.cnblogs.com/mxh168/p/13965876.html
Copyright © 2020-2023  润新知