我是靠谱客的博主 悲凉咖啡,最近开发中收集的这篇文章主要介绍数据库触发器问题集,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

最后

以上就是悲凉咖啡为你收集整理的数据库触发器问题集的全部内容,希望文章能够帮你解决数据库触发器问题集所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部