【问题标题】:Data Manipulation through a function in PostgreSQL通过 PostgreSQL 中的函数进行数据操作
【发布时间】:2014-09-20 06:36:31
【问题描述】:

例如,

 CREATE TABLE tbl_products
(
  prod_id serial NOT NULL,
  prod_name text,
  prod_qty integer,
  prod_batch text,
  prod_group text
)

数据是

INSERT INTO tbl_products(prod_name, prod_qty, prod_batch, prod_group)VALUES ('BIOTOR 10 TAB', 10, 'bat6', 'A');
INSERT INTO tbl_products(prod_name, prod_qty, prod_batch, prod_group)VALUES ('RAMISAVE H 5 MG CAP', 12, 'bat7', 'D');
INSERT INTO tbl_products(prod_name, prod_qty, prod_batch, prod_group)VALUES ('TREND XR 500 MG TAB', 40, 'bat67', 'H');
INSERT INTO tbl_products(prod_name, prod_qty, prod_batch, prod_group)VALUES ('TAZLOC 80', 78, 'bat9', 'H');
INSERT INTO tbl_products(prod_name, prod_qty, prod_batch, prod_group)VALUES ('BUDECORT 200 Rotocap', 11, 'bat1', 'H');
INSERT INTO tbl_products(prod_name, prod_qty, prod_batch, prod_group)VALUES ('ESOZ D 20 MG CAP', 45, 'bat78', 'F');
INSERT INTO tbl_products(prod_name, prod_qty, prod_batch, prod_group)VALUES ('LSR BABY FEEDING NIPPLES', 87, 'bat99', 'G');

此时我正在将InsertUpdate 转换为不同功能的tbl_products,那么有没有一种好方法可以将insertupdate 包装成一个Fucntion..?
注意:prod_name 不会重复

【问题讨论】:

标签: sql postgresql insert-update dml


【解决方案1】:

希望这有效,

create or replace function ins_upd(prod_name text, prod_qty int, prod_batch text, prod_group text) returns text as
$$                                                       --       1                        2                   3                         4   
declare 
  sql_job varchar; -- optional 
  sql_dml text;
  pdt_id record;
begin
  if (select exists (select prod_id from tbl_products p where p.prod_name=$1)) = false then
  sql_dml = 'INSERT INTO tbl_products(prod_name, prod_qty, prod_batch, prod_group)VALUES   
  ('''||$1||''', '||$2||', '''||$3||''', '''||$4||''')';
  sql_job= 'New Product '||$2||' Added !'; -- optional
else
for pdt_id in select prod_id   from tbl_products p where p.prod_name=$1
loop
  sql_dml = 'UPDATE tbl_products SET  prod_name='''||($1)||''', prod_qty='||$2||',   
  prod_batch='''||$3||''', prod_group='''||$4||''' WHERE prod_id = '||pdt_id.prod_id||'';
end loop;
  sql_job= 'Product '||$2||' Updated !'; -- optional
end if;
  execute sql_dml;
return sql_job; --optional
end;
$$
language plpgsql 

【讨论】:

    猜你喜欢
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 2021-06-29
    • 2018-04-08
    相关资源
    最近更新 更多