[英]SQL Server - Construct a dynamic where clause based on the records inside a table
[英]Dynamic where clause based on table
我想根據表形成一個動態的 where 子句。 如果必須添加相同的列存在'OR'子句,否則它必須是'AND' 。 我沒有做到這一點,因為當存在相同的列時它不起作用
結果:
Where = ((COL1='8715') OR (COL1 ='4100)) and ((COL2 BETWEEN 10 AND 20 ) OR (COL2 >=5))
代碼:
lv_set := 'OR'
FOR i in 1..:lv_count
DO
if (:OPERATOR[:i] = 'EQ')
then
lv_where = '(' || lv_where || :FIELD[:i] || ' = ' || :LOW[:i] || ')' || :lv_set;
elseif (:OPERATOR[:i] = 'BT')
then
lv_where = lv_where || '(' || :FIELD[:i] || ' BETWEEN ' || :LOW[:i] || ' AND ' || :HIGH[i] || ')' || :lv_set;
elseif (:OPERATOR[:i] = 'LT')
then
lv_where = lv_where || '(' || :FIELD[:i] || ' < ' || :LOW[:i] || ')' || :lv_set;
elseif (:OPERATOR[:i] = 'GT')
then
lv_where = lv_where || '(' || :FIELD[:i] || ' > ' || :LOW[:i] || ')' || :lv_set;
elseif (:OPERATOR[:i] = 'LE')
then
lv_where = lv_where || '(' || :FIELD[:i] || ' <= ' || :LOW[:i] || ')' || :lv_set;
elseif (:OPERATOR[:i] = 'GE')
then
lv_where = lv_where || '(' || :FIELD[:i] || ' >= ' || :LOW[:i] || ')' || :lv_set;
end if;
END FOR;
創建變量為:
v_query VARCHAR2(4000);
v_where varchar2(2000);
進行查詢:
v_query := 'SELECT ... FROM ... WHERE ' || v_where
v_where必須包含字符,您必須根據您的要求創建一個創建不同查詢的邏輯。
最后只需要你做:
EXECUTE IMMEDIATE v_query;
所有這些語句都必須定義在 Block 中。
https://docs.oracle.com/cd/B12037_01/appdev.101/b10807/13_elems017.htm
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.