【问题标题】:Why is my codes having error 00049 Bad Bind Variable为什么我的代码有错误 00049 Bad Bind Variable
【发布时间】:2021-02-20 01:37:42
【问题描述】:
create or replace  trigger addDate
before insert or update on Employee
for each row
begin
    for EmployeeRec in
(
    select * from employee
)
loop
    if (EmployeeRec.DateLimit > sysdate) then
        raise_application_error (-20001, 'You are only allowed to insert once a day, please try again 
        tomorrow');
end if;
end loop EmployeeRec;
:NEW.DateLimit := sysdate + 1;
end;
/
show errors;

只需要能够插入一天的记录。任何其他记录必须等到第二天 New.DateLimit 出现 PLS 00049 错误

【问题讨论】:

    标签: sql oracle plsql triggers unique-constraint


    【解决方案1】:

    也许列名不是 DateLimit,而是 Date_Limit。

    【讨论】:

    • 如果您每天需要一个员工的一条记录,那么您可以有一个唯一的约束和一个日期更新/插入的列并检查它?如果有一天你收到一个员工的 10 行会发生什么,那么插入它的过程是什么?
    【解决方案2】:

    如果我没有正确地关注您,您希望每天只允许一条记录,如 date_limit 列所定义的那样。

    您不需要为此触发。一个选项使用计算列和唯一约束。

    create table employee (
        employee_id  int primary key,
        name         varchar2(100),
        date_limit   date default sysdate,
        day_limit    date generated always as (trunc(date_limit)) unique
    );
    

    day_limit 是一个计算列,其中包含date_limit 的日期部分(已删除时间部分)。此列上设置了unique 约束,因此两行不能有属于同一天的date_limits。

    Demo on DB Fiddle

    【讨论】:

    • 这就是问题所在!赋值语句创建触发器哈哈哈
    猜你喜欢
    • 2019-01-19
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多