代码之家  ›  专栏  ›  技术社区  ›  ThatDataGuy

创建过程因分号[duplicate]而失败

  •  0
  • ThatDataGuy  · 技术社区  · 6 年前

    CREATE OR REPLACE FUNCTION update_modified_timestamp()  
    RETURNS TRIGGER AS $$
      BEGIN
        NEW.modified_at = now();
        RETURN NEW; 
      END;
    $$ LANGUAGE plpgsql;
    

    当我尝试在SQuirreL(3.5.3或3.6)中执行此操作时,我得到以下错误:

    Error: ERROR: unterminated dollar-quoted string at or near "$$
     BEGIN
         NEW.modified_at = now()"
      Position: 77
    SQLState:  42601
    ErrorCode: 0
    

    can be mitigated by using single quotes 要像这样划分函数体:

    CREATE OR REPLACE FUNCTION update_modified_timestamp()  
    RETURNS TRIGGER AS '
      BEGIN
        NEW.modified_at = now();
        RETURN NEW; 
      END;
    ' LANGUAGE plpgsql;
    

    不过,我还是想知道这件事是否解决不了——我想这肯定是有可能的 Flyway 可以执行这个脚本,并且它使用在squirrell中配置的完全相同的JDBC驱动程序。


    @一匹没有名字的马 注意到这个错误与JDBC驱动程序无关,而是SQuirreL如何在将SQL语句发送到数据库之前解析SQL语句并将其拆分成块。因此,剩下的问题是: 我找了很多次都找不到办法。

    0 回复  |  直到 10 年前
        1
  •  10
  •   zb226 Steven Lizarazo    8 年前

    可以更改语句分隔符,使语句不会在 ; :

    去: 会议 会话属性 SQL语言 语句分隔符

    即使不能将其更改为空字符串,也可以将其更改为 // ,它允许执行问题中的语句。