数据库触发器问题集

1.用JDBC动态创建触发器时,出现的奇怪问题:

Error: PLS-00103: 出现符号 ""在需要下列之一时:
begin case declare end
exception exit for goto if loop mod null pragma raise return
select update while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge pipe
符号 "" 被忽略。

右键重新编译(recompile)也会出错
但是创建的触发器在PL/SQL重新Execute(F8)一次没问题。
初步判断是由于直接使用Freemarker生成的sql创建触发器导致的,特别应该关注回车换行符
因为现在如果重新将这个生成的触发器以流的方式读出一次,再执行则不会出错。
[color=red]更新:[/color]确定是由于oracle不能识别window的回车换行符,统一修改为linux类型的回车换行符即可
2.SQLServer中的语句和JDBC的语句区别
在JDBC的SQL中不能使用GO,因为:

GO is not a Transact-SQL statement; it is a command recognized by the sqlcmd and
osql utilities and SQL Server Management Studio Code editor.

那以前创建触发器时,类似下面的语句:

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'TG_WF_Activity' AND type
= 'TR')
DROP TRIGGER TG_WF_Activity_Activity
GO
CREATE TRIGGER TG_WF_Activity_Activity...

在JDBC中只能拆分成两个SQL语句,一个drop,一个create
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值