Oracle pl/sql函数中的多个查询

Oracle pl/sql函数中的多个查询,oracle,plsql,Oracle,Plsql,我在pl/sql中有一个函数,其中我希望有三个查询,每个查询将设置一个变量(exist、decured和dates),返回的字符串取决于这些变量的组合 CREATE OR REPLACE FUNCTION get_cat_status (systemId IN NUMBER) RETURN VARCHAR2 AS status VARCHAR2 (2000) := 'Null'; exist NUMBER := 1; withdrawn

我在pl/sql中有一个函数,其中我希望有三个查询,每个查询将设置一个变量(exist、decured和dates),返回的字符串取决于这些变量的组合

CREATE OR REPLACE FUNCTION get_cat_status (systemId IN NUMBER)
    RETURN VARCHAR2
AS
    status      VARCHAR2 (2000) := 'Null';
    exist       NUMBER := 1;
    withdrawn   NUMBER := 0;
    dates       NUMBER := 0;
BEGIN
    BEGIN
          SELECT DISTINCT result
            INTO exist
            FROM SEEDTEST_RESULT
           WHERE     SEEDTEST_RESULT.RESULT = '1'
                 AND SEEDTEST_RESULT.TEST_TYPE = 'C'
                 AND SEEDTEST_RESULT.SLRN_ID = systemId;
    EXCEPTION
        WHEN NO_DATA_FOUND
        THEN
            exist := 1;
    END;

    BEGIN
      SELECT 1
        INTO withdrawn
        FROM CROP
       WHERE     CROP.SYSTEM_ID = systemId
             AND NVL ( (CROP.ORIG_AREA - NVL (CROP.ADD_AREA, 0)), 0) = 0;

   EXCEPTION
    WHEN NO_DATA_FOUND
    THEN
        withdrawn := 1;
   END;

   BEGIN
      SELECT DATE_3_PROC  --replaced with 1 and works
        INTO dates
        FROM CROP
       WHERE CROP.SYSTEM_ID = systemId;
   EXCEPTION
    WHEN NO_DATA_FOUND
    THEN
        dates := 1;
   END;

    IF (dates = 0 AND withdrawn = 1)
    THEN
        status := 'NO RESULT';
    END IF;

    IF (dates = 1 AND exist = 1)
    THEN
        status := 'REJECTED';
    END IF;

    RETURN (status);
END get_cat_status;

我曾尝试添加它们,但到目前为止都不起作用。有人能帮忙吗?

这个函数正在做我想要的事情。在此之前,第三个查询不起作用,因为DATE_3_PROC是一个日期,我将其分配给dates,一个数字。在最初的Access应用程序中,它只检查每个查询是否没有返回任何记录,并更新相应的变量。在Oracle中,我将它与混合到了,后者已经将值赋给了变量,但没有意义。现在,当查询不返回任何记录时,我分配0而不是1,当有记录时,它将是1

Create or replace FUNCTION get_cat_status(systemId IN Number) 
 RETURN VARCHAR2 
 AS 
   status VARCHAR2(2000) := ' ';
   exist NUMBER;
   withdrawn NUMBER;
   dates NUMBER;
 BEGIN 

  BEGIN
   SELECT DISTINCT 1 INTO exist
   FROM SEEDTEST_RESULT
   WHERE SEEDTEST_RESULT.RESULT = '1'
     AND SEEDTEST_RESULT.TEST_TYPE = 'C'
     AND SEEDTEST_RESULT.SLRN_ID = systemId;
   EXCEPTION
     WHEN NO_DATA_FOUND THEN
       exist := 0;  
   END;  

   BEGIN      
     SELECT 1 INTO withdrawn
    FROM CROP
    WHERE CROP.SYSTEM_ID = systemId
      AND NVL((CROP.ORIG_AREA - NVL(CROP.ADD_AREA, 0)), 0) = 0;
    EXCEPTION
      WHEN NO_DATA_FOUND THEN
        withdrawn := 0;  
  END;

  BEGIN
    SELECT 1 INTO dates 
    FROM CROP
    WHERE CROP.SYSTEM_ID = systemId;
    EXCEPTION
      WHEN NO_DATA_FOUND THEN
        dates := 0;  
  END;      

  IF (dates = 1 and withdrawn = 0) THEN 
    status := 'NO RESULT';
  END IF;
  IF (dates = 0 and exist = 0) THEN 
    status := 'REJECTED';
  END IF;

  RETURN(status); 

END get_cat_status;

什么工作不正常?您不需要没有任何聚合函数的
分组依据。正在编译时会出现警告。我添加了第二个查询,它也在工作,但仍在与第三个查询进行斗争。我不熟悉PL/sqlthanker@SudiptaMondal中的调试,我以前有过一个计数。我删除了它们。@Nils您需要发布最新的代码和错误消息,您可以编写
显示错误编译包后,它将向您提供错误消息。