动态 sql 语句 - 取决于变量的数量
Dynamic sql statement - depending on numbers of variables
我的问题是我正在尝试构建一个 SELECT 语句,这将取决于我将传递给它们的变量数量。
重要的事情要知道我使用 Oracle 数据库。
有什么有效的方法来构建这样的语句吗?
例如
我有三个变量(与“AND”关键字连接)可以传递给数据库,它应该给我一个独特的结果。
opt1 -(其中 var1=x 和 var2=y 和 var3=z)
但也有一个选项,我将只传递两个变量并获得结果
opt 2 - WHERE var1=x AND var2=y) 一个变量或 none 并从数据库中获取每条记录。
我不想构建无数不同的 select 语句。必须有一种方法可以做到这一点。
PS。这是与来自 webmethods 的 JDBC 适配器相关的问题。也许有人知道如何在这种环境中解决这个问题?
您可以使用关联数组来存储和检索我向您展示的 elements.Here 来构建查询。您可以使用 cursor
或其他选项来执行它。您可以将其扩展为过程以将变量数组作为参数传递。
参考 Passing an associative array as a parameter between packages实现。
SET SERVEROUTPUT ON;
DECLARE
TYPE where_elems
IS
TABLE OF VARCHAR2 (100) INDEX BY VARCHAR2 (30);
wh where_elems;
v_query VARCHAR2 (4000) := 'SELECT col , col2 FROM yourtable where 1=1 ';
v_idx VARCHAR2 (30);
BEGIN
wh ('col3') := 'value3'; --you can initialize and call a procedure with array as argument.
wh ('col4') := 'value4';
v_idx := wh.FIRST;
WHILE (v_idx IS NOT NULL)
LOOP
v_query := v_query || ' AND ' || v_idx || ' = ' || wh (v_idx);
v_idx := wh.NEXT (v_idx);
END LOOP;
DBMS_OUTPUT.PUT_LINE (v_query);
END;
/
输出
SELECT col , col2 FROM yourtable where 1=1 AND col3 = value3 AND col4 = value4
我的问题是我正在尝试构建一个 SELECT 语句,这将取决于我将传递给它们的变量数量。
重要的事情要知道我使用 Oracle 数据库。
有什么有效的方法来构建这样的语句吗?
例如 我有三个变量(与“AND”关键字连接)可以传递给数据库,它应该给我一个独特的结果。 opt1 -(其中 var1=x 和 var2=y 和 var3=z)
但也有一个选项,我将只传递两个变量并获得结果 opt 2 - WHERE var1=x AND var2=y) 一个变量或 none 并从数据库中获取每条记录。
我不想构建无数不同的 select 语句。必须有一种方法可以做到这一点。
PS。这是与来自 webmethods 的 JDBC 适配器相关的问题。也许有人知道如何在这种环境中解决这个问题?
您可以使用关联数组来存储和检索我向您展示的 elements.Here 来构建查询。您可以使用 cursor
或其他选项来执行它。您可以将其扩展为过程以将变量数组作为参数传递。
参考 Passing an associative array as a parameter between packages实现。
SET SERVEROUTPUT ON;
DECLARE
TYPE where_elems
IS
TABLE OF VARCHAR2 (100) INDEX BY VARCHAR2 (30);
wh where_elems;
v_query VARCHAR2 (4000) := 'SELECT col , col2 FROM yourtable where 1=1 ';
v_idx VARCHAR2 (30);
BEGIN
wh ('col3') := 'value3'; --you can initialize and call a procedure with array as argument.
wh ('col4') := 'value4';
v_idx := wh.FIRST;
WHILE (v_idx IS NOT NULL)
LOOP
v_query := v_query || ' AND ' || v_idx || ' = ' || wh (v_idx);
v_idx := wh.NEXT (v_idx);
END LOOP;
DBMS_OUTPUT.PUT_LINE (v_query);
END;
/
输出
SELECT col , col2 FROM yourtable where 1=1 AND col3 = value3 AND col4 = value4