我正在PostgreSQL中编写一个过程,方法是遵循这些instruction。
CREATE TABLE public.sinh_vien (
id serial NOT NULL,
ma_sinh_vien numeric NULL,
ten_sinh_vien varchar(50) NULL,
ngay_sinh date NULL
);
这是我的程序
create or replace
function sinh_vien_merge(datainput json) returns character varying language plpgsql as $function$
begin
merge
into
public.sinh_vien w
using (
values(
select
x.id ,
x.ma_sinh_vien ,
x.ten_sinh_vien ,
to_date(x.ngay_sinh , 'dd/MM/yyyy') ngay_sinh
from
(
select
*
from
json_populate_recordset(null::record, dataInput :: json) as ( id numeric,
ma_sinh_vien numeric,
ten_sinh_vien varchar,
ngay_sinh varchar )) x)) v on
v.id = w.id
when not matched
insert
(ma_sinh_vien,
ten_sinh_vien,
ngay_sinh)
values(v.ma_sinh_vien,
v.ten_sinh_vien,
v.ngay_sinh)
when matched
update
set
ma_sinh_vien = v.ma_sinh_vien;
ten_sinh_vien = v.ten_sinh_vien,
ngay_sinh = v.ngay_sinh;
return '1';
end;
我收到一条信息
SQL错误[42601]:错误:“public.sinh_vien”不是已知变量
我该如何解决这个问题?
2条答案
按热度按时间yhived7q1#
请注意,PostgreSQL中没有
MERGE
。您链接的文档是“PostgreSQL 8. 4devel文档”,但MERGE
命令从未成为生产版本。因此你不能在你的函数中使用
MERGE
。你需要用你自己的INSERT
和UPDATE
命令来“构建”它的功能。ffx8fchx2#
此问题已在Postgres 15中解决。