Oracle中的动态sql

Oracle中的动态sql,sql,oracle,dynamic-sql,Sql,Oracle,Dynamic Sql,如何根据if-else语句在oracle中创建动态sql sql:= 'select n from where a = p_a'; if p_b is not null then sql:= 'select n from where a = p_a and b = p_b'; 当您可以执行以下操作时,为什么需要动态SQL select n from xx where a = p_a and (b = p_b or p_b is null); 示例: CREATE TYPE t_emp

如何根据if-else语句在oracle中创建动态sql

sql:= 'select n from where a = p_a';
if p_b is not null then
sql:= 'select n from where a = p_a and b = p_b';    

当您可以执行以下操作时,为什么需要动态SQL

select n
from xx
where a = p_a and (b = p_b or p_b is null);

示例:

CREATE TYPE t_emp AS OBJECT (id NUMBER, name VARCHAR2(20))
/
CREATE TYPE t_emplist AS TABLE OF t_emp
/

CREATE TABLE dept_new (id NUMBER, emps t_emplist)
    NESTED TABLE emps STORE AS emp_table;

INSERT INTO dept_new VALUES (
    10, 
    t_emplist(
        t_emp(1, 'SCOTT'),
        t_emp(2, 'BRUCE')));

DECLARE
    deptid NUMBER;
    ename  VARCHAR2(20);
BEGIN
    EXECUTE IMMEDIATE 'SELECT d.id, e.name
        FROM dept_new d, TABLE(d.emps) e  -- not allowed in static SQL
                                          -- in PL/SQL
        WHERE e.id = 1'
        INTO deptid, ename;
END;
/
您可以结合自己的逻辑,根据需要的条件构造命令

听说过
立即执行
?@Gondon感谢您的帮助,但需要我concatane sql查询。此查询不起作用。Maheswaran对不起,我不再查看。我找到了不同的解决方案。再次感谢。