首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用与insert insert相同的变量存在的Oracle情况

使用与insert insert相同的变量存在的Oracle情况
EN

Stack Overflow用户
提问于 2014-11-24 10:29:41
回答 2查看 3.6K关注 0票数 0

我偶然发现了一段T代码,我正试图转换成Oracle。看起来是这样的:

代码语言:javascript
复制
SET @local variable= 
    CASE 
        when exists (select field from table where value=0) then 0
        when exists (select same field from same table where value=1) then 1
        when exists (select same fieldfrom same table where value=2) then 1
        else @local variable
    END

@局部变量是在过程前面的查询结果中设置的。

现在,我尝试以以下方式将其转换为Oracle:

代码语言:javascript
复制
BEGIN
    SELECT CASE
        WHEN EXISTS (
            SELECT field
            FROM table
            WHERE value = 0
        )
        THEN 0
        WHEN EXISTS (
            SELECT same field
            FROM same table
            WHERE value = 1
        )
        THEN 1
        WHEN EXISTS (
            SELECT same field
            FROM same table
            WHERE value = 2
        )
        THEN 1
        ELSE localvariable
    END 
    INTO localvariable
    FROM DUAL;
END;

但是,PL/SQL似乎不喜欢我在else语句和into语句中使用@local变量。我知道这可能不是一个写得很好的查询,但是这里的解决方案是什么呢?我如何用合法的PL/SQL写这个呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-24 11:19:41

CASEEXISTS不能以您预期的方式使用。

你可以做这样的事。

代码语言:javascript
复制
DECLARE
    localvariable1 NUMBER;
    localvariable2 NUMBER;
    localvariable3 NUMBER;
    localvariable  NUMBER;
BEGIN

    SELECT COUNT(DECODE(value,'0',field)) as v1,
           COUNT(DECODE(value,'1',field)) as v2,
           COUNT(DECODE(value,'2',field)) as v3 
    INTO
           localvariable1,
           localvariable2,
           localvariable3
    FROM table;

    IF(localvariable1 > 0)
    THEN
        localvariable := 0;
    ELSIF(localvariable2 > 0 OR localvariable3 > 0 )
    THEN
        localvariable := 1;
    END;
END;
票数 1
EN

Stack Overflow用户

发布于 2014-11-24 23:42:23

我不能假设表中只有一个记录,或者where子句包含其他筛选,以将结果集缩小到一个记录。以下建议重复了这样的行为:如果存在多行,且每个行的值字段可能不同,则结果将基于找到的最低值。

代码语言:javascript
复制
declare LocalVar number;
...
select case Min( Value )
         when 0 then 0
         when 1 then 1
         when 2 then 1
         else LocalVar end 
into LocalVar
from SomeTable
where Value between 0 and 2
  and possible_other_criteria;

实际上,T查询编写得非常糟糕。当您只能在一个表中获得相同的结果时,为什么要对同一个表进行最多三个查询。它也可以更改为与PL/SQL几乎相同的查询。实际上,看起来语法是一样的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27102637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档