Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 如何从命令行而不是SQL调用PL/pgSQL_Postgresql_Plpgsql - Fatal编程技术网

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

Postgresql 如何从命令行而不是SQL调用PL/pgSQL,postgresql,plpgsql,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:ERROR:v_

我使用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:ERROR:v_loc_nbr处或附近的语法错误

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

与其他命令一样,您不能直接运行。
您只能运行SQL。在正文中使用plpgsql或在命令中包装,其中
DO
命令的范围受到限制,因为它们无法返回数据


请查看标记以获取示例。

我不想对此进行更多解释,因为解释得很好。您需要将sql封装在测试中,因此您的
测试。sql
应该这样编写

DO
$$
DECLARE
    v_loc_nbr INTEGER;
BEGIN
    v_loc_nbr := 0;
END;
$$
并尝试执行它
\postgresql\9.3\bin\psql.exe-d postgres-f test.sql