动态 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