代码就是这样 -
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应该被跳过。
答案 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本地查询向你展示一个例子。