如果在Oracle sql developer中使用Select语句的Else

时间:2015-12-03 06:10:58

标签: sql oracle

我想知道是否可以编写一个基于条件返回一组列的SQL查询。

例如:

If (id=='A')
{
    Select id,name
    From Table A
}
Else If(Condition=B)
{
    Select Column1, Column3
    From Table A
}

如果是,请帮我写一下

4 个答案:

答案 0 :(得分:1)

语法(IF-THEN-ELSE)

语法适用于Oracle / PLSQL中的IF-THEN-ELSE:

IF condition THEN
   {...statements to execute when condition is TRUE...}

ELSE
   {...statements to execute when condition is FALSE...}

END IF;

http://www.techonthenet.com/oracle/loops/if_then.php

答案 1 :(得分:1)

您可以在纯SQL中使用CASE表达式执行类似switch的语句。请参阅以下example

SELECT    some_other_field,
          id, 
          CASE ID
             WHEN A THEN columnA
             WHEN B THEN columnB
             ELSE 'Unknown'
          END genericvalue
FROM     customers;

当然有一些限制。例如,THEN子句中返回值的类型需要匹配,因此您可能需要将例如all转换为char,或转换为int等。

答案 2 :(得分:1)

SQL本身不是turing-complete,它没有循环和条件的语法:你可以使用它执行查询,无论它有多复杂,但你无法决定执行哪个查询取决于条件或执行多次查询,这是你在这里要做的。

为了提供这样的功能,每个数据库开发人员通常都提供一种包含变量声明,循环,条件等的附加语言。对于Oracle,这种语言是PL / SQL。

在SQL Developer中你需要做些什么来解决你的问题,看看PL / SQL如何工作是创建一个空脚本,然后写这样的东西:

--Enabling output to the console
SET SERVEROUTPUT ON;
DECLARE
--Variable declaration block; can initialize variables here too
    test_var varchar2(10);
    test_result varchar2(10);
BEGIN
--Initializing variables, the first one we will check in the IF statement, the second one is just for transparency
    test_var := 'test';
    test_result := '';

--IF block: check some condition, perform a select based on the value, save result into a variable
    IF test_var = 'test' THEN
        SELECT '1' INTO test_result FROM dual;
    ELSE
        SELECT '2' INTO test_result FROM dual;
    END IF;

--Output the result to console
    DBMS_OUTPUT.PUT_LINE(test_result);

END;

然后使用'Run script'/ F5运行它。你会得到'1'作为你想象的输出。将test_var更改为其他内容并再次运行,您将获得“2”。

如果您有这类问题,那么了解SQL和PL / SQL究竟是什么可能会有用。 PL / SQL非常高效和通用,可用于从自动化SQL脚本到实现复杂优化算法的任何事情。

当然,PL / SQL具有类似FOR和WHILE循环,CASE检查等的结构。

答案 3 :(得分:0)

我想这就是你在看的东西。

即使使用CASE和DECODE,也无法在SQL中进行此类选择。

但我们能做的最好的事情是我们可以创建一个返回ref_cursor的函数,并使用SQL stetement中的函数来满足您的需求。

下面是一个例子:

CREATE OR REPLACE
  FUNCTION test1(
      id1 VARCHAR)
    RETURN sys_refcursor
  AS
    v_ref sys_refcursor;
  BEGIN
    IF(id1='A') THEN
      OPEN v_ref FOR SELECT id,name FROM TABLE A;
    ElsIf(id1='B') THEN
      OPEN v_ref FOR SELECT Column1, Column3 FROM TABLE A;
    END IF;
    RETURN v_ref;
  END;

select test1(A) from dual;

以上只会显示列ID和名称。

相关问题