你可以用动态SQL来实现动态sql怎么实现,,详细说说吗 一下是动态SQL,就是根据不同的I的值来执行不同的SQL,你可以根据这个思路该一下你的SQLdeclare -- Local variables here i integer; sql_str varchar2(2000); a varchar2(100); begin i := 0; if i = 0 then sql_str := 'select ''i is equal 0'' from dual'; end if; execute immediate SQL_STR into A; dbms_output.put_line(a); i := 1; if i > 0 then sql_str := 'select ''i is greater than 0'' from dual'; end if; execute immediate SQL_STR into A; dbms_output.put_line(a); i := 1; end;
SELECT NVL(MAX(PA_LOCK_FLAG), 0) FROM PA_PROGRESS_DEPT PA WHERE PA.PA_MONTH_STR = V_PA_MONTH_STR AND PA.DEPT_DISTINGUISH_NO IN (SELECT HD.DEPT_DISTINGUISH_NO FROM HR_DEPARTMENT HD WHERE HD.DEPT_DISTINGUISH_NO IS NOT NULL CASE WHEN IN_DEPTNO='' /*在这里我想做个判断,如果传过来的参数IN_FLAF是空就用下面的sql*/ AND HD.DEPTNO =IN_DEPTNO ELSE /*如果传过来IN_FLAF是1就执行下面的sql*/ AND HD.DEPTNO IN (SELECT HD.DEPTNO FROM HR_DEPARTMENT HD START WITH HD.DEPTNO = IN_DEPTNO CONNECT BY PRIOR HD.DEPTNO = HD.PARENT_DEPT_NO)) END
一下是动态SQL,就是根据不同的I的值来执行不同的SQL,你可以根据这个思路该一下你的SQLdeclare
-- Local variables here
i integer;
sql_str varchar2(2000);
a varchar2(100);
begin
i := 0;
if i = 0 then
sql_str := 'select ''i is equal 0'' from dual';
end if;
execute immediate SQL_STR
into A;
dbms_output.put_line(a);
i := 1;
if i > 0 then
sql_str := 'select ''i is greater than 0'' from dual';
end if; execute immediate SQL_STR
into A;
dbms_output.put_line(a);
i := 1;
end;
SELECT NVL(MAX(PA_LOCK_FLAG), 0)
FROM PA_PROGRESS_DEPT PA
WHERE PA.PA_MONTH_STR = V_PA_MONTH_STR
AND PA.DEPT_DISTINGUISH_NO IN
(SELECT HD.DEPT_DISTINGUISH_NO
FROM HR_DEPARTMENT HD
WHERE HD.DEPT_DISTINGUISH_NO IS NOT NULL
CASE WHEN IN_DEPTNO=''
/*在这里我想做个判断,如果传过来的参数IN_FLAF是空就用下面的sql*/
AND HD.DEPTNO =IN_DEPTNO
ELSE
/*如果传过来IN_FLAF是1就执行下面的sql*/
AND HD.DEPTNO IN
(SELECT HD.DEPTNO
FROM HR_DEPARTMENT HD
START WITH HD.DEPTNO = IN_DEPTNO
CONNECT BY PRIOR HD.DEPTNO = HD.PARENT_DEPT_NO))
END