如何将参数从bat文件或命令行传递给plpgsql函数?

时间:2017-10-30 02:22:26

标签: sql postgresql batch-file plpgsql psql

这是我的sql代码:

create extension if not exists dblink;

drop function if exists  func_statistic(host varchar(32),port varchar(32),username varchar(32),password varchar(32));
create or replace function func_statistic(host varchar(32),port varchar(32),username varchar(32),password varchar(32)) returns int as
$$
declare v_dbname text;
declare v_dest_file text;
declare v_connect_info text;
declare v_sql_str text;
begin
   ......
end;
$$ language plpgsql;


select func_statistic(:host,:port,:username,:password);

我在蝙蝠中写道:

psql -U %user% -h %host% -p %port%  -v host=%host% -v port=%port% 
-v username=%user% -v password=%PGPASSWORD% -c %sql_file% cmsdb 

那是错的。我不能以这种方式将参数传递给.sql文件的函数。你知道如何将参数传递给plpgsql函数或为什么它们不能通过?非常感谢你。

1 个答案:

答案 0 :(得分:0)

在此上下文中可能使用-c选项是错误的。您可能应该使用-f选项或从stdin阅读。应使用语法:'varname'

在撇号之间转义和关闭文本参数
CREATE OR REPLACE FUNCTION public.fx(text)
 RETURNS void
 LANGUAGE plpgsql
AS $function$
begin
  raise notice '>>%<<', $1;
end;
$function$

[oracle@ora2pg migrace]$ echo "select fx(:'xxx')" | psql -v xxx='aaaaa bbbb'
Time: 1,962 ms
Debug assertions "off"
NOTICE:  >>aaaaa bbbb<<
┌────┐
│ fx │
╞════╡
│    │
└────┘
(1 row)