我将在oracle APEX中做实验室订单页面,我有2列
客户和测试属于选定的客户
首先我将选择客户,然后我想显示该客户的测试列表
我为测试列表列做了以下代码:
选择列表的 SQL 查询:
Select GET_CUSTOMERS_TEST(CUST_NO) TEST_NAME,CUST_NO
From CUSTOMERS_PRICE_LIST
WHERE CUST_NO = :P58_CUSTOMER;
然后我创建了以下函数并从查询 GET_CUSTOMERS_TEST(CUST_NO) 中调用它
create or replace function GET_CUSTOMERS_TEST(P_CUST_NO NUMBER)
RETURN VARCHAR2
IS
V_NAME VARCHAR2(255);
BEGIN
IF P_CUST_NO IS NOT NULL THEN
SELECT B.TEST_NAME_ENG INTO V_NAME
FROM CUSTOMERS_PRICE_LIST A, LAB_TESTS B
WHERE A.CUST_NO = P_CUST_NO
AND A.TEST_NO = B.TEST_NO;
RETURN V_NAME;
ELSE
return null;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
END;
/
当我选择客户然后打开测试列表时显示错误,它显示此错误:
我该如何解决这个错误,提前谢谢你。
嗯...您应该调试您的 apex 页面以了解到底发生了什么。下面的屏幕截图来自我为模拟您的错误而编写的一个小测试。
第 1 步:启用调试:
打开该记录并查找错误。这将告诉你哪个语句出错了。
从你的错误看来,查询
SELECT B.TEST_NAME_ENG INTO V_NAME
FROM CUSTOMERS_PRICE_LIST A, LAB_TESTS B
WHERE A.CUST_NO = P_CUST_NO
AND A.TEST_NO = B.TEST_NO;
返回多于一行。
SELECT INTO
从单行 docs 中检索一列或多列。如果 select 返回多于一行,则会引发错误 1422 的异常。如果您知道这一点并且只想要第一行,那么您可以添加 FETCH FIRST 1 ROWS ONLY
...
WHERE A.CUST_NO = P_CUST_NO
AND A.TEST_NO = B.TEST_NO
FETCH FIRST 1 ROWS ONLY;
否则...可能是一个错误并且需要修复查询。祝你好运!