2017-02-24 89 views
-5

请告诉我这段代码有什么问题? 我得到 “错误在第2行: ORA-00907:缺少右括号”为下面的片段。请帮助我。SQL查询将三角形分类为等边,等腰等

select (
IF (A = B or B = C or C = A) THEN 
DBMS_OUTPUT.PUT_LINE('Isosceles') 
ELSIF (A=B and B=c) THEN 
DBMS_OUTPUT.PUT_LINE('Equilateral') 
ELSIF (A != B) and (B != C) and (A+B>C or B+C>A or A+C>B)THEN 
DBMS_OUTPUT.PUT_LINE('Scalene') 
ELSE 
DBMS_OUTPUT.PUT_LINE('Not A Triangle') 
END IF 
) 
from triangles; 
+0

请解释一下你想要做什么 - 你的代码是充满了语法错误... – Siyual

+0

应该不是三面等于平均isosoles?不“或” - “和”。 – duffymo

+0

Noooo,您不能在Oracle查询中使用“IF-ELSE”语句。搜索“CASE”。而且在查询中也不能'DBMS_OUTPUT.PUT_LINE'。 –

回答

2

请记住,CASE语句是为了评估 - 第一个WHEN适合“获胜”,并没有进一步的评估条款作出。所以:

with 
    triangles (A, B, C) as (
     select 20, 20, 23 from dual union all 
     select 20, 20, 20 from dual union all 
     select 20, 21, 22 from dual union all 
     select 13, 14, 30 from dual 
    ) 
select A, B, C, 
     case 
      when A+B <= C or B+C <= A or C+A <= B then 'Not A Triangle'     
      when A = B and B = C    then 'Equilateral' 
      when A = B or B = C or A = C then 'Isosceles' 
      else          'Scalene' 
      end as classification 
from triangles 
; 

    A B C CLASSIFICATION 
--- --- --- -------------- 
20 20 23 Isosceles 
20 20 20 Equilateral 
20 21 22 Scalene 
13 14 30 Not A Triangle 

4 rows selected. 
+0

谢谢@mathguy – Vish

+0

现在我使用的是我们的代码,但仍然输出错误。我不知道为什么。以下是我尝试的挑战: 也许你可以尝试一下,如果可能的话: https://www.hackerrank.com/challenges/what-type-of-triangle – Vish

+0

@Vish - “输出错误”doesn不多说了。哪里不对?向我们展示你输入的三个数字,结果是什么,然后我们可以讨论它是对还是错。 – mathguy

相关问题