postgresql—创建一个sql函数,将数据插入到两个现有表中

x6h2sr28  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(497)

我正在尝试创建一个函数,将完整和相关的信息插入到现有的表中。我需要函数来检查另一个表中是否存在某些实体,如果不存在,则插入数据。示例代码如下:

CREATE FUNCTION insert_payment (customer_uuid uuid, customer_name varchar(63), payment_uuid uuid, total_amount integer

假设我想在payments表中输入一个payments。我希望函数检查另一个名为customers的现有表,以查看表中是否已经存在customer\uuid和customer\u name。如果没有,我希望函数将customer_uuid和customer_name信息插入customers,并将所有四个参数的数据输入payments。
这是我第一个关于堆栈溢出的问题,如果需要进一步的澄清,请告诉我。我也是一个学生,仍然在学习如何有效地沟通时谈到编码,所以,再次,如果需要进一步澄清,我会尽我最大的努力。谢谢您!

1cklez4t

1cklez4t1#

你可以利用 insert on conflict do nothing 插入客户,如果客户已经存在,则跳过插入。
所以在这个表定义中:

create table customer (id uuid primary key, name text);
create table payment (id uuid primary key, customer_id uuid not null references customer, amount integer);

此函数将执行您想要的操作:

CREATE FUNCTION insert_payment (customer_uuid uuid, customer_name varchar(63), 
                                payment_uuid uuid, total_amount integer)
  returns void
as
$$
  insert into customer (id, name) 
  values (customer_uuid, customer_name)
  on conflict do nothing;

  insert into payment (id, customer_id, amount)
  values (payment_uuid, customer_uuid, total_amount);
$$
language sql;

这和首先检查是否存在一样有效( select exists (...) )在插入之前,因为insert语句无论如何都会执行该检查。
在线演示

mlnl4t2r

mlnl4t2r2#

在知道表字段的名称之后,我可以帮助您更多,但是在这里我共享一个代码,也许它会帮助您

//set variable
$customer_uuid= $_POST['customer_uuid'];
$customer_name= $_POST['customer_name'];

//WRITE QUERY to the check-in customers table

$duplicate_customer = $this->db->prepare( "SELECT customer_uuid,customer_name FROM customers WHERE customer_uuid = '$customer_uuid' AND customer_name='customer_name'" );        $duplicate_customer->execute();

//now check data if exist in the customer table

if($duplicate_customer->rowCount() > 0){
           //write here insert query to insert data in customer table
}

相关问题