在尝试返回数据时在Oracle中使用IF语句

时间:2017-03-27 09:01:00

标签: oracle plsql

如何从IF语句中返回数据?我有一个IF语句,它意味着返回一个不同于该语句结果的结果。

IF :Value = 1 THEN
SELECT Name FROM TABLE_A
ELSEIF :Value = 2 THEN
SELECT Name FROM TABLE_B
ELSEIF :Value = 3 THEN
SELECT Name FROM TABLE_C

但这不起作用。它期望在这些选择中使用INTO语句。我怀疑这是因为Oracle无法退出一个块?

有没有更快的方法来返回那些select语句而不创建表变量来存储数据或搞乱函数?

2 个答案:

答案 0 :(得分:0)

您可以通过纯SQL执行此操作:

SELECT
  ':Value' user_input,
  CASE
    WHEN   ':Value'  IN('a1','a2','a3')
    THEN (select name from table_a)
    WHEN   ':Value'  = 'i'
    THEN (select name from table_b)
  END AS output
FROM
  dual

good info about case

答案 1 :(得分:0)

如果您的案例中需要多个结果,那么您可以选择智能UNION

  SELECT t1_Col_1, t1_Col_2,'&VALUE' from TABLE_1
   WHERE '&VALUE' = '1'
UNION ALL
  SELECT t2_Col_1, t2_Col_2,'&VALUE' from TABLE_2
   WHERE '&VALUE' = '2'

在此解决方案中,tx_Coln的类型和数量必须相同。