oracle存储过程中的判断
以下是sqlSELECT 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
/*在这里我想做个判断,如果传过来的参数IN_FLAF是空就用下面的sql*/
AND HD.DEPTNO =IN_DEPTNO
/*如果传过来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));
就是根据IN_DEPTNO传过来的值,来判断执行哪条sql语句
------解决方案--------------------
引用:Quote: 引用:Quote: 引用:以下是sqlSELECT 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
/*在这里我想做个判断,如果传过来的参数IN_FLAF是空就用下面的sql*/
AND HD.DEPTNO =IN_DEPTNO
/*如果传过来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));
就是根据IN_DEPTNO传过来的值,来判断执行哪条sql语句
你可以用动态SQL来实现
动态sql怎么实现,,详细说说吗
一下是动态SQL,就是根据不同的I的值来执行不同的SQL,你可以根据这个思路该一下你的SQL
declare
-- 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;