postgresql 过程中的表名不是已知变量

b09cbbtk  于 2022-11-23  发布在  PostgreSQL
关注(0)|答案(2)|浏览(231)

我正在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”不是已知变量
我该如何解决这个问题?

yhived7q

yhived7q1#

请注意,PostgreSQL中没有MERGE。您链接的文档是“PostgreSQL 8. 4devel文档”,但MERGE命令从未成为生产版本。
因此你不能在你的函数中使用MERGE。你需要用你自己的INSERTUPDATE命令来“构建”它的功能。

ffx8fchx

ffx8fchx2#

此问题已在Postgres 15中解决。

相关问题