sql - Oracle-APEX 公式中的 ORA-01403
问题描述
我有这个代码。:P99_CAR, :P99_PARTS 是可以选择 ID 的列表(通过查找表), :P99_AMOUNT 是我表单中的一个简单输入。因此,您选择这 3 个部分并想要检查以下代码。因此,如果 PART_ID 为 5,CAR_ID 为 3,并且我从列表中选择相同的数字,则会出现错误,我不知道为什么。
DECLARE
--Varchar(100) or Number
l_car Varchar(100);
l_part Varchar(100);
BEGIN
SELECT CAR_ID, PART_ID INTO l_car, l_part FROM CAR_PARTS WHERE CAR_ID = :P99_CAR AND PARTS_ID = :P99_PARTS;
IF l_car IS NULL OR l_parts IS NULL THEN
INSERT INTO CAR_PARTS (CAR_ID, PARTS_ID, CUR_AMOUNT) VALUES (:P99_CAR, :P99_PARTS, :P99_AMOUNT);
ELSE
UPDATE CAR_PARTS
SET CAR_ID = :P99_CAR,
PARTS_ID = :P99_PARTS,
CUR_AMOUNT = CUR_AMOUNT + :P99_AMOUNT
WHERE CAR_ID = :P99_CAR AND PARTS_ID = :P99_PARTS;
END IF;
END;
但是我在处理和提交时遇到 ORA-01403 错误
Ajax 调用返回服务器错误 ORA-01403:找不到执行 PL/SQL 代码的数据。
我知道我需要插入一个带有该错误的异常,但为什么它甚至会出现?
解决方案
您的SELECT
语句没有返回任何行。由于这适用于不同的环境,因此您的绑定变量不是您认为的那样。您应该apex_debug.message
在此过程中添加调用,然后检查调试日志中的值。
但是,我会用一个合并语句替换您的整个过程:
MERGE INTO car_parts cp
USING ( SELECT :P99_CAR_ID AS car_id, :P99_PARTS ID AS parts_id,
:P99_CUR_AMOUNT AS cur_amount ) src
ON ( cp.car_id = src.car_id AND cp.parts_id = src.parts_id )
WHEN NOT MATCHED THEN INSERT ( car_id, parts_id, cur_amount )
VALUES ( src.car_id, src.parts_id, src.cur_amount )
WHEN MATCED THEN UPDATE SET cur_amount = src.cur_amount
推荐阅读
- java - 为什么 java.util.UUID 是 Comparable 的?
- python - 在 tkinter 中创建一个带有多个文本框的可滚动主窗口
- html - 为什么我的网页上不显示完整日历?
- python - 用户输入的输入必须返回列表中的所有索引及其名称中的输入
- java - 正则表达式计算 CSV 中的逗号,但忽略引号内的逗号
- java - 一次获取几条记录
- amazon-web-services - AWS 上的自托管 GitLab
- python-telegram-bot - 如何将图像上传到 Telegram 的服务器
- javascript - 为每个页面设置一个状态变量
- r - 如何使用“粘贴”来引用数据框列