概述
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
最后
以上就是悲凉咖啡为你收集整理的数据库触发器问题集的全部内容,希望文章能够帮你解决数据库触发器问题集所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复