【问题标题】:Select different query based on a variable根据变量选择不同的查询
【发布时间】:2022-01-22 18:49:24
【问题描述】:

我想根据变量的值执行不同的查询。我有一个包含很多列的表,我想根据变量选择和重命名不同数量的字段。

类似

var varbl VARCHAR2

exec :varbl := 'XX'


if :varbl = 'XX'
    (select a, b, c from table1 where cond)
elsif :varbl = 'XXXX'
    (select d, e, f, g from table1 where cond)
end

我试图达到这个低谷

decode( :varbl, 'XX',
            (QUERY 1),
            (decode( :varbl, 'XXX',
                        (QUERY 2), default)),
            default)

但它不起作用,因为decode 应该在 SELECT 子句中使用,并且我丢失了列的名称。此外,如果我在内部查询中选择多于一列,则会收到“值过多”错误。

我正在研究 Oracle SQL。

This 答案对我不起作用,因为在 3 种不同的情况下,我至少有 30 个字段需要区分。我只想要一些允许我执行不同查询的解决方案。

【问题讨论】:

  • 你到底想在哪里做呢?您发布的代码建议使用 SQL*Plus。 “IF”在那里不起作用(但在 PL/SQL 中)。如果你能描述得更好一点,也许有人可以提供帮助。

标签: sql oracle


【解决方案1】:

为了使这种情况不使用 plsql,您可以尝试执行两个查询来检查 where-part 中的变量值。我没有测试这个例子,但你必须清楚这个想法

select a, b, c 
  from table1 
 where :varbl = 'XX'
   and cond;

select d, e, f, g 
  from table1 
 where :varbl = 'XXXX'
   and cond;

因此,最后一个查询将不返回任何内容,而第一个查询将为您提供 'XX' 值所需的所有行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-09-27
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    相关资源
    最近更新 更多