2014-03-25 50 views
0

的Oracle SQL如果条件SQL甲骨文

我需要检查的条件(标志),然后执行SQL代码。

什么是它的语法。我看到一些文件,它说我们需要声明程序,有人可以帮助我得到这种语法。

E.g:

IF Flag = 1 
    BEGIN 
     select productgroup,... 
     from 
     join.. on 
     where 
    END 
ELSE 
    BEGIN 
     select product 
     from 
     join.. on 
     left join .. on 
     where 
    END 
+0

要你想要什么更具体的。你想创建一个PL/SQL函数/方法吗?你想让你的查询返回条件数据吗? –

+0

查看http://plsql-tutorial.com/,例如 –

+0

想要返回条件数据。如果标志为1,它应该运行第一个查询并返回数据,如果没有,运行else条件中的第二个查询并显示结果 – Surbhi

回答

0

你的PL/SQL块中, IF Flag = 1 THEN select productgroup,... [INTO {variables here}] from join.. on where ...; ELSE select product [INTO {variables here}] from join.. on left join .. on where ...; END IF;

记住,如果要断言返回值的查询可能需要INTO子句。但是,为了使用此结构,您必须确保您的查询将仅返回1和1行。没有更多,不少。

如果您需要将您的值作为行集合,则必须对光标进行decalre操作。

- >这只是一个匿名块。不是程序或功能。

DECLARE 
    CURSOR C1 IS 
    [YOUR FIRST QUERY HERE]; 

    CURSOR C2 IS 
    [YOUR SECOND QUERY HERE]; 

[other variables] 
BEGIN 

IF Flag = 1 THEN 
    FOR REC_C1 IN C1 LOOP 
    .... 
    END LOOP; 
ELSE 
    FOR REC_C2 IN C2 LOOP 
    .... 
    END LOOP; 
END IF; 
END; 
+1

另请注意,在上面的示例中,变量REC_C1和REC_C2的范围仅适用于LOOP结构本身。 – OraNob

0
PROCEDURE check_condition (p_flag IN NUMBER) 
IS 
v_num NUMBER; 
BEGIN 

IF p_flag=1 THEN 

SELECT COUNT(1) 
    INTO v_num 
    FROM table1 
WHERE 1=0 
    AND ROWNUM=1; 

    IF v_num=0 THEN 

    raise_application_error(-20101,'ERROR'); 
    END IF; 

ELSIF p_flag=2 THEN 
NULL; 
ELSE 
NULL; 
END IF; 

END; 
+0

使用count()你不能得到too_many_rows或no_data_found,如果你只需要检查,那么rownum = 1正好及时,你的值总是1/0; – user2879235