如何在Postgresql中创建条件插入函数?

问题描述 投票:0回答:1

我试图编写一个函数,根据该表中的值在我的表的column3中插入一些值,但是我不太熟悉在Postgresql中编写函数。

--Create some table

    CREATE TABLE test(column1 INT, column2 INT, column3 TEXT) 
    INSERT INTO test VALUES(-8020,15),(-200,1),(23,115)

--Build function

    CREATE OR REPLACE FUNCTION new_function()
    RETURNS TEXT AS 
    $$
    BEGIN

        IF test(column1) <= -7000 THEN INSERT INTO test(column3) VALUES('small');
        ELSIF test(column1) >= -7000 AND test(column2) <= 15 THEN INSERT INTO test(column3) VALUES('nohello');
        ELSIF test(column1) >= -7000 ANDtable(column2) >= 15 THEN INSERT INTO test(column3) VALUES('test');
        ELSE INSERT INTO test(column6) VALUES("nodata");
        END IF;

    END;
    $$
    LANGUAGE plpgsql;

结果应该是一个看起来像这样的表:

Column1 | Column2 | Column3
---------------------------
 -8020  |    15   |  small
  -200  |     1   |  nohello
    23  |   115   |  test

在调用new_function时出现错误column1 doesn't exist.

sql postgresql sql-update sql-insert
1个回答
1
投票

您似乎实际上是在寻找update(更改现有行的值),而不是insert(创建新行)。

但是,最重要的是,我建议只使用计算列:

create table test(
    column1 int, 
    column2 int, 
    column3 text generated always as (
        case 
            when column1 <= -7000 then 'small'
            when column1 <= 15    then 'nohello'
            else 'nodata'
        end
    ) stored
);

在表中插入或更新行时,数据库会相应地自动调整计算列,因此它始终是最新的。

Demo on DB Fiddle

insert into test(column1, column2) values(-8020,15),(-200,1),(23,115);

select * from test;
第1列|第2列|第三栏------:| ------:| :-------8020 | 15 |小-200 | 1 | Nohello23 | 115 |没有数据
© www.soinside.com 2019 - 2024. All rights reserved.