PL/pgSQL 语法错误

Posted

技术标签:

【中文标题】PL/pgSQL 语法错误【英文标题】:PL/pgSQL syntax error 【发布时间】:2013-02-19 17:00:16 【问题描述】:

我有一个非常简单的 PL/pgSQL 脚本:

     declare x varchar(100);

当我运行它时,我会收到一条消息:

    [WARNING  ] declare x varchar(100)
        ERROR:  syntax error at or near "varchar"
        LINE 1: declare x varchar(100)
                          ^

我真的不明白这有什么问题。

【问题讨论】:

显示整个创建函数脚本 这是整个脚本。 您必须将其包装在create function 命令中。 不是完整的(并且语法正确)PL/pgSQL“脚本” 【参考方案1】:

您可以在 PostgreSQL 的函数体内使用过程语句。

CREATE OR REPLACE FUNCTION foo()
RETURNS int AS 
$$ -- here start procedural part
   DECLARE x int;
   BEGIN
     x := 10;
     RETURN x;
   END;
$$ -- here finish procedural part
LANGUAGE plpgsql; -- language specification 

或在临时函数中(匿名块)

DO $$
DECLARE x int;
BEGIN
  x := 10;
  RAISE NOTICE '>>>%<<<', x;
END;
$$;

不可能像 T-SQL 那样使用过程语句作为 SQL 语句。

【讨论】:

【参考方案2】:

举个例子

DO $$
Declare
  test varchar;
begin
   test := 'teste';
   if (char_length(test) > 0) then
      RAISE NOTICE '>>>%<<<', test;
   end if;
end;
$$;

【讨论】:

【参考方案3】:

我已经通过以下代码解决了这个问题:

do $$
declare InvestigationTypeId int;
declare var_STDStatusMasterId int;
begin
   InvestigationTypeId := null;
   var_STDStatusMasterId := null;
end;
$$;

【讨论】:

以上是关于PL/pgSQL 语法错误的主要内容,如果未能解决你的问题,请参考以下文章

PL/pgSQL 中的“格式错误的数组文字”错误

关于 Pl/pgsql 中游标的一些错误

简单的 PL/pgSQL 函数的错误

Pl/pgSQL 匿名代码块在 [42601] 错误上失败:查询没有结果数据的目的地

PL/pgSQL:删除(更新)与记录匹配的行

浅谈DWS函数出参方式