sql - Oracle 触发器错误:错误的绑定变量“新”
问题描述
我正在尝试创建一个触发器来检查容量、2 个函数的输入get_max_capacity
并get_current_capacity
具有 OBJECT_U5 类型(我的代码如下)
CREATE OR REPLACE TYPE object_u5 AS OBJECT (
student_id VARCHAR2(1000),
course_id VARCHAR2(1000),
sec_id VARCHAR2(1000),
semester VARCHAR2(1000),
year NUMBER(4,0),
grade VARCHAR2(3)
);
CREATE OR REPLACE FUNCTION get_current_capacity (
course_register IN object_u5
) RETURN NUMBER IS
current_capacity NUMBER(38);
BEGIN
SELECT
COUNT(*)
INTO current_capacity
FROM
takes
WHERE
course_id = course_register.course_id
AND sec_id = course_register.sec_id
AND year = course_register.year
AND semester = course_register.semester;
END;
CREATE OR REPLACE TRIGGER check_capacity BEFORE
INSERT ON takes
FOR EACH ROW
ENABLE DECLARE
max_capacity NUMBER(4, 0);
current_capacity NUMBER(4, 0);
BEGIN
max_capacity := get_max_capacity(:new);
current_capacity := get_current_capacity(:new);
IF ( max_capacity > cur_capacity ) THEN
dbms_output.put_line('Insert successfully');
ELSE
dbms_output.put_line('The classroom is full! Choose the others');
END IF;
END;
返回的 2 个错误:PLS-00049: bad bind variable 'NEW'
解决方案
确切地; :new
什么?应该是例如
current_capacity := get_current_capacity
(object_u5(:new.student_id,
:new.course_id,
:new.sec_id,
:new.semester,
:new.year,
:new.grade));
修复后,触发器编译:
SQL> CREATE OR REPLACE TRIGGER check_capacity BEFORE
2 INSERT ON takes
3 FOR EACH ROW
4 ENABLE DECLARE
5 max_capacity NUMBER(4, 0);
6 current_capacity NUMBER(4, 0);
7 BEGIN
8 max_capacity :=
9 get_max_capacity(object_u5(:new.student_id,
10 :new.course_id,
11 :new.sec_id,
12 :new.semester,
13 :new.year,
14 :new.grade));
15 current_capacity :=
16 get_current_capacity(object_u5(:new.student_id,
17 :new.course_id,
18 :new.sec_id,
19 :new.semester,
20 :new.year,
21 :new.grade));
22
23 IF ( max_capacity > current_capacity ) THEN
24 dbms_output.put_line('Insert successfully');
25 ELSE
26 dbms_output.put_line('The classroom is full! Choose the others');
27 END IF;
28 END;
29 /
Trigger created.
SQL>
推荐阅读
- highcharts - 如何在高图中的图例上悬停时禁用系列低不透明度状态?
- python - python将每小时数据[1-24]添加到日期时间数据
- angular - Angular 7 - 由于`模块解析失败:意外字符'@'`出现错误如何解决这个问题?
- django - 如何在 Django 中创建轮换日志?
- string - 通过 Startindex 和 Endindex 获取字符串的子字符串
- postgresql - jOOQ 不使用自定义数据绑定
- mysql - 如何在 VBA 中获取“yyyy/MM/dd hh:mm:ss.fff”格式的时间戳?
- powershell - 通过 PowerShell 的 DB2 ODBC
- azure - 在 Azure 中的 ubuntu linux 虚拟机上安装 OSSEC 的日志问题
- wordpress - 如何更改 wordpress 管理员收藏图标?