【问题标题】:Oracle Function With - IF EXISTS - [duplicate]Oracle 函数与 - 如果存在 - [重复]
【发布时间】:2019-11-29 19:35:19
【问题描述】:

我如何如果存在 在 Oracle 中?在 SQL Server 中,以下工作。

create or replace FUNCTION FExemplo(p_processoId INT) RETURN varchar2
AS
  v_Result varchar2(255);
  v_TemIsso INT;
BEGIN
  v_TemIsso := 0;
  IF EXISTS (SELECT EXEMPLO.EXEMPLOID FROM EXEMPLO WHERE EXEMPLO.EXEMPLOID = p_processoId)
  THEN
    v_TemIsso := 1;
  END IF;
  RETURN '';
END FExemplo;

【问题讨论】:

  • 很遗憾,您不能简单地将代码从 SQL Server 复制到 Oracle。您需要学习 Oracle 的做事方式。如果您还没有这样做,我建议您阅读 PL/SQL 语言参考,它是 Oracle 数据库文档的一部分。

标签: oracle plsql


【解决方案1】:

您可以像这样使用变量来计算元素:

SELECT count(EXEMPLO.EXEMPLOID) into v_count FROM EXEMPLO WHERE EXEMPLO.EXEMPLOID = 
p_processoId

 IF v_count > 0 THEN 
    --do something
 ELSE 
    --do something
 END IF;

当然,在使用变量v_count之前,你必须将它定义为一个数字。

如果您不使用v_count 变量,您可能会得到类似NO_DATA_FOUND 的异常。

【讨论】:

    【解决方案2】:

    PL/SQL 中不允许使用IF EXISTS 语法。您可以重写代码,使其在查询中使用EXISTS,如下所示:

    BEGIN
    SELECT 
        CASE WHEN EXISTS (
            SELECT 1
            FROM EXEMPLO 
            WHERE EXEMPLO.EXEMPLOID = p_processoId
        ) 
        THEN 1 ELSE 0 END
        INTO v_TemIsso
    FROM DUAL;
    -- rest of your code follows
    END
    

    【讨论】:

      猜你喜欢
      • 2020-09-26
      • 1970-01-01
      • 2020-01-11
      • 2016-05-11
      • 2014-02-01
      • 1970-01-01
      • 2011-04-30
      • 2020-03-27
      • 2015-04-08
      相关资源
      最近更新 更多