oracle - pl/sql 函数中的多个查询
问题描述
我在 pl/sql 中有一个函数,我想要三个查询,每个查询都会设置一个变量(存在、撤回和日期),返回的字符串取决于这些变量的组合。
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 中,我将它与into混合在一起,后者已经将值分配给了变量,但这没有意义。现在,当查询没有返回任何记录时,我分配 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;
推荐阅读
- next.js - NextJS - react-springy-parallax 不起作用
- python - 如何在python的其他行中用值填充NA
- javascript - 如何仅动画负边距
- acumatica - 为什么 Acumatica API 操作在 Postman 中可以正常工作,但在 .NET 中却不能正常工作(尽管它报告成功)?
- jquery - 如何使日期选择器可见?
- node.js - 如何在标头中传递参数
- java - 没有消息的 socketTimeout 异常可能是什么情况?
- sqlite - 提取 JSON 数组并将它们作为单独的行插入到新数据库中
- c# - RegEx 用于捕获括号中的数字
- java - 如何在 JPQL 中为属性文件中的 INTERVAL 添加参数作为值?