动态sql语句 - 取决于变量数

时间:2017-10-26 10:20:17

标签: sql oracle select dynamic-sql webmethods

我的问题是我正在尝试构建一个SELECT语句,这将取决于我将传递给它们的变量数量。

要知道我使用Oracle数据库很重要。

有没有任何有效的方法来建立这样的陈述?

例如,

我有三个可变的(连接" AND'关键字),我可以传递给数据库,它应该给我一个独特的结果。 opt1 - (WHERE var1 = x AND var2 = y AND var3 = z)

但也有一个选项,我只会传递两个变量并获得结果 opt 2 - WHERE var1 = x AND var2 = y)一个变量或无变量并从数据库中获取每条记录。

我不想构建无数个不同的select语句。一定有办法做到这一点。

PS。这是与webmethods的JDBC适配器相关的问题。也许有人知道如何在这个环境中解决这个问题?

1 个答案:

答案 0 :(得分:1)

您可以使用关联的数组来存储和检索元素。我已经向您展示了构造查询。您可以使用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