数据库触发器问题集

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创建触发器导致的,特别应该关注回车换行符
  因为现在如果重新将这个生成的触发器以流的方式读出一次,再执行则不会出错。
  更新:确定是由于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

你可能感兴趣的:(oracle,sql,linux,SQL Server,jdbc)