如何从命令行而不是SQL调用PL / pgSQL

时间:2014-12-05 22:50:09

标签: postgresql plpgsql

我使用Oracle编写PL / SQL脚本,并且我正在使用PostgreSQL尝试我的第一个PL / pgSQL脚本。例如,我创建了这个test.sql文件。

DECLARE
    v_loc_nbr         INTEGER;
BEGIN
    v_loc_nbr := 0;
END;

我尝试使用命令行执行:

\postgresql\9.3\bin\psql.exe -d postgres -f test.sql

但我得到的语法错误如下:

  

psql:test.sql:4:错误:语法错误在或附近" v_loc_nbr"

我认为问题是当我希望它运行PL / pgSQL时尝试执行SQL。该命令应该是什么?

2 个答案:

答案 0 :(得分:1)

与其他procedural languages一样,您无法直接投放PL/pgSQL 您只能运行SQL。在function正文中使用plpgsql或在DO命令中包含DO命令的范围,因为它们无法返回数据。

查看代码中的示例。

答案 1 :(得分:0)

我不想详细解释这个问题,因为Erwin解释得很好。你需要将你的sql包装在DO内,所以你的test.sql应该像这样写< / p>

DO
$$
DECLARE
    v_loc_nbr INTEGER;
BEGIN
    v_loc_nbr := 0;
END;
$$

并尝试执行\postgresql\9.3\bin\psql.exe -d postgres -f test.sql