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

时间:2019-09-22 02:29:45

标签: postgresql

我正在遵循这些instruction在PostgreSQL中编写一个过程。 我的桌子是下面的代码

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”不是已知变量

我该如何解决?

1 个答案:

答案 0 :(得分:1)

请注意,PostgreSQL中没有MERGE。您链接的文档是“ PostgreSQL 8.4devel文档”,但是MERGE命令从未使它成为可生产的版本。

因此,您不能在函数中使用MERGE。您将需要使用自己的INSERTUPDATE命令来“构建”其功能。