postgresql函数出错

时间:2015-07-21 16:52:28

标签: postgresql

请解释一下,为什么我在这里收到错误:

function criaSheet(){
  var folder = DriveApp.getFolderById('ID');
  folder.createFile('new Spreadsheet', '', MimeType.GOOGLE_SHEETS)
}

1 个答案:

答案 0 :(得分:0)

您正在使用PLPGSQL语法,但将该函数声明为SQL。这就是为什么函数失败了SYNTAX ERROR的原因。使用语句LANGUAGE声明函数的语言,并在最后一行声明它:

LANGUAGE 'sql' STABLE;

SQL函数不支持BEGIN - END语句和异常捕获。

要解决此问题,请在LANGUAGE 'sql'中进行简单的更改LANGUAGE 'plpgsql'

其他一些注意事项:

  • 可能没有必要在此处捕获异常。请改用FOUND变量。

  • 使用STABLE关键字,该功能无法执行INSERT。将STABLE更改为VOLATILE

  • 您声明了RETURNS TABLE,但该函数没有返回任何内容。请改用RETURNS VOID

  • 不允许使用SELECT并丢弃结果。请改用PERFORM

您的版本的有效版本可能是:

DROP FUNCTION IF EXISTS upset(varchar);
CREATE or REPLACE FUNCTION upset(domain_name varchar)
RETURNS VOID AS $$
  BEGIN
    PERFORM domain from separser_domains where domain=domain_name;
    IF NOT FOUND THEN
      INSERT into separser_domains(domain) VALUES (domain_name);
    END IF;
    RETURN;
  END; 
$$
LANGUAGE 'plpgsql' VOLATILE;