Postgresql 如何从命令行而不是SQL调用PL/pgSQL
我使用Oracle编写PL/SQL脚本,我正在使用PostgreSQL尝试我的第一个PL/pgSQL脚本。例如,我创建了这个test.sql文件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_
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