如何编写动态查询以在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
是什么。例如,它们可以被编码为三个过程吗?