Sql 如何创建不允许用户在特定日期(如周二)更新表的触发器?

Sql 如何创建不允许用户在特定日期(如周二)更新表的触发器?,sql,triggers,oracle10g,Sql,Triggers,Oracle10g,我在Oracle10g的SQL命令行上创建了这个触发器,并成功地创建了它。 今天是星期二,我试图在employee表中插入一行。但并没有引发错误,而是插入了行 create or replace trigger myt1 before insert or delete or update on employee begin if upper(to_char(sysdate,'DAY')) = 'TUESDAY' then raise_application_

我在Oracle10g的SQL命令行上创建了这个触发器,并成功地创建了它。 今天是星期二,我试图在employee表中插入一行。但并没有引发错误,而是插入了行

create or replace trigger myt1 before insert or delete or update on employee
   begin
      if upper(to_char(sysdate,'DAY')) = 'TUESDAY' then
          raise_application_error(-20101,'TABLE IS SECURED');
      end if;
   end;
我在Oracle 10g中以hr身份登录。这可能不会影响您登录的用户,从而引发错误


请告诉我为什么触发器没有引发应用程序错误以及我应该怎么做

日期格式掩码返回一个空格填充字符串。假设会话的语言设置为英语,那么最长的一天是
星期三
,它是9个字符,因此其他所有一天的字符串也将填充为9个字符。这在很久以前是有意义的,当时报告通常以固定宽度字体打印,因此函数返回长度一致的字符串会简化格式问题

您可以通过向格式掩码添加
fm
来删除多余的空格

IF( to_char( sysdate, 'fmDAY' ) = 'TUESDAY' )
您还可以使用格式掩码来生成不填充空格的缩写日名称

IF( to_char( sysdate, 'DY' ) = 'TUE' )
或者,如果您真的愿意,您可以使用
DAY
格式掩码并与空格填充字符串进行比较

IF( to_char( sysdate, 'DAY' ) = 'TUESDAY  ' )
如果您编写的代码需要处理一个需要支持多种语言的环境,那么您需要考虑这样一个事实:在不同的地区,周从不同的日期开始,并且一周中的日期的名称和缩写在不同的语言中是不同的。如果您处于这种情况,则需要将第三个参数传递给
to_char
函数以指定NLS设置

IF( to_char( sysdate, 'fmDAY', 'NLS_DATE_LANGUAGE=ENGLISH' ) = 'TUESDAY' )

DAY
格式掩码返回一个空格填充的字符串。假设会话的语言设置为英语,那么最长的一天是
星期三
,它是9个字符,因此其他所有一天的字符串也将填充为9个字符。这在很久以前是有意义的,当时报告通常以固定宽度字体打印,因此函数返回长度一致的字符串会简化格式问题

您可以通过向格式掩码添加
fm
来删除多余的空格

IF( to_char( sysdate, 'fmDAY' ) = 'TUESDAY' )
您还可以使用格式掩码来生成不填充空格的缩写日名称

IF( to_char( sysdate, 'DY' ) = 'TUE' )
或者,如果您真的愿意,您可以使用
DAY
格式掩码并与空格填充字符串进行比较

IF( to_char( sysdate, 'DAY' ) = 'TUESDAY  ' )
如果您编写的代码需要处理一个需要支持多种语言的环境,那么您需要考虑这样一个事实:在不同的地区,周从不同的日期开始,并且一周中的日期的名称和缩写在不同的语言中是不同的。如果您处于这种情况,则需要将第三个参数传递给
to_char
函数以指定NLS设置

IF( to_char( sysdate, 'fmDAY', 'NLS_DATE_LANGUAGE=ENGLISH' ) = 'TUESDAY' )

DAY
格式掩码返回一个空格填充的字符串。假设会话的语言设置为英语,那么最长的一天是
星期三
,它是9个字符,因此其他所有一天的字符串也将填充为9个字符。这在很久以前是有意义的,当时报告通常以固定宽度字体打印,因此函数返回长度一致的字符串会简化格式问题

您可以通过向格式掩码添加
fm
来删除多余的空格

IF( to_char( sysdate, 'fmDAY' ) = 'TUESDAY' )
您还可以使用格式掩码来生成不填充空格的缩写日名称

IF( to_char( sysdate, 'DY' ) = 'TUE' )
或者,如果您真的愿意,您可以使用
DAY
格式掩码并与空格填充字符串进行比较

IF( to_char( sysdate, 'DAY' ) = 'TUESDAY  ' )
如果您编写的代码需要处理一个需要支持多种语言的环境,那么您需要考虑这样一个事实:在不同的地区,周从不同的日期开始,并且一周中的日期的名称和缩写在不同的语言中是不同的。如果您处于这种情况,则需要将第三个参数传递给
to_char
函数以指定NLS设置

IF( to_char( sysdate, 'fmDAY', 'NLS_DATE_LANGUAGE=ENGLISH' ) = 'TUESDAY' )

DAY
格式掩码返回一个空格填充的字符串。假设会话的语言设置为英语,那么最长的一天是
星期三
,它是9个字符,因此其他所有一天的字符串也将填充为9个字符。这在很久以前是有意义的,当时报告通常以固定宽度字体打印,因此函数返回长度一致的字符串会简化格式问题

您可以通过向格式掩码添加
fm
来删除多余的空格

IF( to_char( sysdate, 'fmDAY' ) = 'TUESDAY' )
您还可以使用格式掩码来生成不填充空格的缩写日名称

IF( to_char( sysdate, 'DY' ) = 'TUE' )
或者,如果您真的愿意,您可以使用
DAY
格式掩码并与空格填充字符串进行比较

IF( to_char( sysdate, 'DAY' ) = 'TUESDAY  ' )
如果您编写的代码需要处理一个需要支持多种语言的环境,那么您需要考虑这样一个事实:在不同的地区,周从不同的日期开始,并且一周中的日期的名称和缩写在不同的语言中是不同的。如果您处于这种情况,则需要将第三个参数传递给
to_char
函数以指定NLS设置

IF( to_char( sysdate, 'fmDAY', 'NLS_DATE_LANGUAGE=ENGLISH' ) = 'TUESDAY' )

使用什么软件插入记录?日数(
D
model)的可能重复也取决于NLS。如果您添加可选的
nlsparam
参数以强制将值设置为固定语言,则可以使用长或短日名称:
to_char(sysdate,'DY',NLS_DATE_language=ENGLISH')='TUE'
。插入记录所用的软件是什么?日数的可能重复(
D
model)也取决于NLS。如果您添加可选的
nlsparam
参数以强制将值设置为固定语言,则可以使用长或短日名称:
to_char(sysdate,'DY','NLS_DATE_language=ENGLISH')='TUE'