如何编写动态查询以在plsql中实现此逻辑?

如何编写动态查询以在plsql中实现此逻辑?,sql,plsql,Sql,Plsql,代码是这样的- If value = 1 then logic1 elsif value = 2 then logic1 + logic2 elsif value = 3 then logic1 + logic2 + logic3. endif; 逻辑1,2,3具有来自相同表的数据,但列不同。 对于logic1,使用第1列,对于logic2,使用第2列等 如何合并它以检查值并动态执行查询? 若值为1,那个么它应该只返回逻辑1中的值,并跳过其他两个。如果是2,则应跳过逻辑3 您也可以像

代码是这样的-

If value = 1 then
logic1

elsif value = 2 then

logic1 + logic2

elsif value = 3 then

logic1 + logic2 + logic3.

endif;
逻辑1,2,3具有来自相同表的数据,但列不同。 对于logic1,使用第1列,对于logic2,使用第2列等

如何合并它以检查值并动态执行查询?
若值为1,那个么它应该只返回逻辑1中的值,并跳过其他两个。如果是2,则应跳过逻辑3

您也可以像本例一样使用动态SQL语句,并根据您需要的动态查询类型进行调整

DECLARE
  TYPE EmpCurTyp  IS REF CURSOR;
  v_emp_cursor    EmpCurTyp;
  emp_record      employees%ROWTYPE;
  v_stmt_str      VARCHAR2(200);
  v_e_job         employees.job%TYPE;
  value           valueTyp;
BEGIN
   value :=1; -- possibly may be a parameter

   -- Dynamic SQL statement with placeholder:

   If value=1 then

      v_stmt_logic1 := 'SELECT logic1-col1, logic1-col2, ... FROM employees   WHERE logic1-col1 = :j';

      -- Open cursor logic1 & specify bind variable in USING clause:
      OPEN v_logic1_cursor FOR v_stmt_str USING 'valueOflogic1';

   elsif value=2 then

      v_stmt_logic_12 := 'SELECT logic1-col1, logic1-col2, logic2-col1, logic2-col2, ... FROM employees   WHERE logic1-col1 = :j';

      -- Open cursor for logic1+2 & specify bind variable in USING clause:
      OPEN v_logic12_cursor FOR v_stmt_str USING 'valueOflogic12';

   elsif value=3 then

      v_stmt_logic_132 := 'SELECT * FROM employees   WHERE logic1-col1 = :j';

      -- Open cursor for all logics & specify bind variable in USING clause:
      OPEN v_logic123_cursor FOR v_stmt_str USING 'valueOflogic123';

  endif;      

  -- Fetch rows from result set one at a time:
  LOOP
    FETCH v_emp_cursor INTO emp_record;
    EXIT WHEN v_emp_cursor%NOTFOUND;
  END LOOP;

  -- Close cursor:
  CLOSE v_emp_cursor;
END;

这只是我认为您需要的一个想法,我尝试向您展示一个使用pl/sql dinamic本机查询的示例。

请编辑您的问题,并更具体地说明您正在尝试做什么。谢谢。这完全取决于
logic1
logic2
logic3
是什么。例如,它们可以被编码为三个过程吗?