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

时间:2016-09-27 14:42:29

标签: 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 -column1,则使用logic2-column 2等。

如何合并它以动态检查值执行查询? 就像值为1一样,它只应从逻辑1返回值并跳过其他两个值。如果它的2然后逻辑3应该被跳过。

1 个答案:

答案 0 :(得分:0)

您也可以像这个示例一样使用动态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本地查询向你展示一个例子。

相关问题