【问题标题】:How to insert a parameter value in insert query in PostgreSQL function?如何在 PostgreSQL 函数的插入查询中插入参数值?
【发布时间】:2013-12-24 15:09:30
【问题描述】:

我在 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

请帮我指出问题。

【问题讨论】:

    标签: function postgresql plpgsql sql-insert


    【解决方案1】:

    而plpgsql中的赋值运算符是:=:
    The forgotten assignment operator "=" and the commonplace ":="

    并且不要引用语言名称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;
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        我在脚本中犯了两个严重错误...一个是未声明的“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';
        

        【讨论】:

          猜你喜欢
          • 2015-05-23
          • 1970-01-01
          • 2018-03-14
          • 2017-06-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-13
          • 1970-01-01
          相关资源
          最近更新 更多