Function 如何在PostgreSQL函数的插入查询中插入参数值?

Function 如何在PostgreSQL函数的插入查询中插入参数值?,function,postgresql,plpgsql,sql-insert,Function,Postgresql,Plpgsql,Sql Insert,我在PostgreSQL中编写了一个带有参数的函数,我想在数据库表中插入参数值。脚本执行得很好,但当我调用函数时,收到一条错误消息: CREATE OR REPLACE FUNCTION sp_load_purchase_order(x int) RETURNS void AS $$ declare var_val char; begin var_val='p'+i; insert into purchase_order( create_uid, create_date,

我在PostgreSQL中编写了一个带有参数的函数,我想在数据库表中插入参数值。脚本执行得很好,但当我调用函数时,收到一条错误消息:

CREATE OR REPLACE FUNCTION sp_load_purchase_order(x int)
  RETURNS void AS
$$ 
declare var_val char;
begin

var_val='p'+i;
insert into purchase_order(
create_uid, 
   create_date, 
   write_date, 
   write_uid, 
   journal_id, 
   date_order, 
   partner_id, 
   amount_untaxed, 
   location_id, 
   company_id, 
   amount_tax, 
   state, 
   pricelist_id, 
   warehouse_id, 
   payment_term_id, 
   amount_total, 
   name, 
   invoice_method, 
   shipped, 
   minimum_planned_date
) 
values(1,now(),now(),1,13,now(),17,1.00,12,1,0.00,'draft',2,1,3,1.00
      ,var_val,'order','f' ,now()
);

end;
$$
  LANGUAGE 'plpgsql';
ERROR:  column "i" does not exist
LINE 1: SELECT 'p'+i
                   ^
QUERY:  SELECT 'p'+i
CONTEXT:  PL/pgSQL function sp_load_purchase_order(integer) line 5 at assignment

********** Error **********

ERROR: column "i" does not exist
SQL state: 42703
Context: PL/pgSQL function sp_load_purchase_order(integer) line 5 at assignment
错误消息:

CREATE OR REPLACE FUNCTION sp_load_purchase_order(x int)
  RETURNS void AS
$$ 
declare var_val char;
begin

var_val='p'+i;
insert into purchase_order(
create_uid, 
   create_date, 
   write_date, 
   write_uid, 
   journal_id, 
   date_order, 
   partner_id, 
   amount_untaxed, 
   location_id, 
   company_id, 
   amount_tax, 
   state, 
   pricelist_id, 
   warehouse_id, 
   payment_term_id, 
   amount_total, 
   name, 
   invoice_method, 
   shipped, 
   minimum_planned_date
) 
values(1,now(),now(),1,13,now(),17,1.00,12,1,0.00,'draft',2,1,3,1.00
      ,var_val,'order','f' ,now()
);

end;
$$
  LANGUAGE 'plpgsql';
ERROR:  column "i" does not exist
LINE 1: SELECT 'p'+i
                   ^
QUERY:  SELECT 'p'+i
CONTEXT:  PL/pgSQL function sp_load_purchase_order(integer) line 5 at assignment

********** Error **********

ERROR: column "i" does not exist
SQL state: 42703
Context: PL/pgSQL function sp_load_purchase_order(integer) line 5 at assignment

请帮我指出问题。

您的函数参数名为
x
,但您的函数体引用了一个名为
i
的未声明变量。

我在脚本中犯了两个严重错误。。。一个是未声明的“i”变量,另一个是我使用“+”符号连接的尝试。。。这是工作代码:::

CREATE OR REPLACE FUNCTION sp_load_purchase_order(x int)
  RETURNS void AS
  $$ 
  declare var_val char(10);
begin

var_val='p'||x;
insert into purchase_order(
create_uid, 
   create_date, 
   write_date, 
   write_uid, 
   journal_id, 
   date_order, 
   partner_id, 
   amount_untaxed, 
   location_id, 
   company_id, 
   amount_tax, 
   state, 
   pricelist_id, 
   warehouse_id, 
   payment_term_id, 
   amount_total, 
   name, 
   invoice_method, 
   shipped, 
   minimum_planned_date
) 
values(
1,now(),now(),1,13,now(),17,1.00,12,1,0.00,'draft',2,1,3,1.00,var_val,'order','f' ,now()
);


end;
$$
  LANGUAGE 'plpgsql';

plpgsql中的赋值运算符是
:=

并且不要引用语言名
plpgsql

您不需要为此声明变量。连接可以在
INSERT
语句中进行,这样比较便宜

CREATE OR REPLACE FUNCTION sp_load_purchase_order(x int)
  RETURNS void AS
$func$ 
begin

insert into purchase_order(create_uid, ..., name, ...) 
values(1, ..., 'p' || x, ...);

end
$func$  LANGUAGE plpgsql;