Oracle SQL 动态拼接Where后面的筛选条件
来源:互联网 发布:印度支那联邦 知乎 编辑:程序博客网 时间:2024/05/05 12:38
TBL_NAME COLM_NAMEOPER_CODE RULE_CMPAR_VALUEAND_OR_OR
STORE_DISTRO RTE_ID= 22410034A
STORE_MASTER ZONE= 贵州
需要拼接成:
STORE_DISTRO.RTE_ID='22410034' and STORE_MASTER.ZONE='贵州'
1. 创建临时表存放查询后的数据,临时表可以根据实际查询结果创建(create table wmedi.wave_distro_filter... ..)
2. 创建自定义函数get_wave_query_param,用来拼接完整的Where条件
3. 定义sql字符,后面接上get_wave_query_param函数返回的筛选条件,通常情况下PL/SQL是不能直接运行的,需要用到execute immediate执行SQL,写入临时表,最后从临时表读取数据,(如果直接用execute immediate ‘select ... from ...’,很难返回出结果集,所以采用临时表存放数据)
declare strsql varchar2(3000);
strwhere varchar2(1000);
begin
execute immediate 'truncate table wmedi.wave_distro_filter';
strsql:='insert into wmedi.wave_distro_filter select store_distro.* ' ||
'from store_distro '||
'inner join store_master on store_distro.store_nbr=store_master.store_nbr' ||
' where ' ;
select get_wave_query_param('201207110076') into strwhere from dual;
strsql:=strsql || strwhere;
execute immediate strsql;
end;
create or replace function get_wave_query_param (p_wave_nbr in carton_hdr.wave_nbr%type)
return varchar as
v_query_param varchar2(1000);
begin
select replace(text,';','') into v_query_param from (
select row_number()over(partition by groupname order by groupname,lvl desc) rn,groupname,text from (
select t.groupname,level lvl,SYS_CONNECT_BY_PATH(t.strwhere,' ; ') text from (
select row_number()over(partition by rule_sel_dtl.rule_id order by rule_sel_dtl.sel_seq_nbr) id,'sqlwhere' groupname,tbl_name||'.'||colm_name||oper_code||''''||rule_cmpar_value||''' '||(case and_or_or when 'A' then 'and' when 'O' then 'or' else '' end) strWhere
from rule_sel_dtl
where rule_id in (select rule_id
from wave_rule_parm
where wave_parm_id in
(select wave_parm_id
from wave_parm
where wave_nbr = p_wave_nbr)
and rule_prty = 1)
) t connect by t.groupname=prior t.groupname and id-1=prior id
) t
) t where t.rn=1;
return v_query_param;
exception
when others then
return null;
end;
- Oracle SQL 动态拼接Where后面的筛选条件
- PL/SQL 动态Sql拼接where条件
- SQL 存储过程 where 条件 动态拼接
- oracle where 后面的条件中|| 是什么意思
- 使用反射让linq实现动态查询, 类似拼接sql语句的where 条件
- 用存储过程生成分页的where条件拼接SQL
- 对与主表的筛选条件,应该放在where后面
- 动态生成适用于像sql的where条件拼接的面板js代码 与 php处理代码 (一)
- 动态生成适用于像sql的where条件拼接的面板js代码 与 php处理代码 (二)
- Code First Entity Framework动态组合Lambda表达式作为数据筛选条件,代替拼接SQL语句
- Code First Entity Framework动态组合Lambda表达式作为数据筛选条件,代替拼接SQL语句
- sql的where后面的多个条件case when判断执行
- oracle 查询语句后面的where条件为null就不需要
- sql 条件加在 left join 与where后面的区别
- 处女篇:sql语句中where和on后面条件顺序的问题
- 摘: 实现动态Where 条件的SQL Procedure
- Postgresql 存储过程--sql语句的where条件的拼接操作
- 将带有、号的字符串,以逗号分割,然后拼接为SQL语句的WHERE条件
- 判断两个链表是否相交
- 页面必需单击一次图才能显示
- C++-------DWORD 定义
- Hibernate中复合主键的配置和使用
- C++的64位整数(_int64)
- Oracle SQL 动态拼接Where后面的筛选条件
- Source Navigator PK Source Insight
- 用perl获取google搜索的结果
- C++ GetTickCount()和Sleep()
- C++ Sort排序函数
- java oracle 时区
- Spring容器启动后自动执行Servlet进行预处理
- http 头信息详解
- C/S 与 B/S 区别