oracle - 在oracle中触发和插入数据的问题
问题描述
我在尝试将数据插入表时遇到了触发器问题
CREATE OR REPLACE TRIGGER OGRANICZ
BEFORE INSERT ON BILET
FOR EACH ROW
DECLARE
counter NUMBER(6);
check NUMBER(6);
BEGIN
SELECT id_seans INTO counter FROM seans WHERE id_seans=:NEW.id_seans AND EXTRACT(YEAR FROM data) = 2020;
SELECT COUNT(*) INTO counter FROM BILET B WHERE B.id_seans=:NEW.id_seans;
IF (check = :NEW.id_seans AND counter >=3) THEN
RAISE_APPLICATION_ERROR(-20001, 'too many');
ELSIF(check <> :NEW.id_seans AND counter >=2) THEN
RAISE_APPLICATION_ERROR(-20002, 'too many');
END IF;
END;
我必须为我的表设置限制,我不能添加到 bilet 表中 id_seans 具有相同值的许多值。当我为 id_seans 的第一个值添加太多值时,它会起作用。但是,如果我尝试为其他 id_seans 添加任何值,则会出现这样的错误
ORA-01403: no data found ORA-06512: at "SQL_OXRLEFMPXILAXVNAWVBOUVDFO.OGRANICZ", line 6
ORA-06512: at "SYS.DBMS_SQL", line 1721
解决方案
NO_DATA_FOUND
异常可能只因第一个 SELECT 语句而引发,而第二个语句在任何情况下都返回一个从零开始的整数。因此,以这样的方式处理第一个异常就足够了
BEGIN
SELECT id_seans
INTO counter
FROM seans
WHERE id_seans=:new.id_seans
AND EXTRACT(YEAR FROM data) = 2020;
EXCEPTION WHEN NO_DATA_FOUND THEN NULL;
END;
推荐阅读
- r - 我的用户文件夹中的口音在执行 read_csv() 时产生错误
- python - 使用 matplot lib 添加多个拉图
- capacitor - 在 Web 实现中获取插件特定的配置
- c# - 同一类型的多个鉴别器
- jinja2 - dbt jinja 中是否有所有*有效*数据库和模式组合的变量列表?
- pdf - iText7 - 无法使用 convertToImage 添加嵌套 SVG
- c - Make file "%.o: %.c" 给出“No rule to make target”
- onenote - 如何在 OneNote 中获取所有 Pages 属性的详细列表?
- nginx - 在 Nginx 的反向代理中为特定静态文件添加缓存?
- airflow-scheduler - 如何限制对airflow.models的访问?