Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将值列表拆分为变量,以及如何使插入函数在postgreSQL中的for each循环下工作_Sql_Postgresql_Postgresql 9.1_Plpgsql_Postgresql 9.2 - Fatal编程技术网

如何将值列表拆分为变量,以及如何使插入函数在postgreSQL中的for each循环下工作

如何将值列表拆分为变量,以及如何使插入函数在postgreSQL中的for each循环下工作,sql,postgresql,postgresql-9.1,plpgsql,postgresql-9.2,Sql,Postgresql,Postgresql 9.1,Plpgsql,Postgresql 9.2,我有两张桌子 党派主义者 名单 这是完整的 我想调用一个可以将值插入两个表的函数。 我的输出应该是这样的。 partyList表 列表表 当我通过以下示例中的这些值调用函数时 insert_function('games','indoor stadium','08-10-2013','ronald;sania;sachin;pointing;samueal;gibbs;gayle;smith;','100;200;100;100;200;100;100;100;'), ('dance','sta

我有两张桌子

党派主义者

名单

这是完整的

我想调用一个可以将值插入两个表的函数。 我的输出应该是这样的。 partyList表

列表表

当我通过以下示例中的这些值调用函数时

insert_function('games','indoor stadium','08-10-2013','ronald;sania;sachin;pointing;samueal;gibbs;gayle;smith;','100;200;100;100;200;100;100;100;'),
('dance','stage','08-15-2013','micheal jakson; britney ; daddy yankee; ar rehaman; jestin bebber;','200;100;100;200;100;');
是否有方法将列表项拆分为整数并在循环中调用列表表的插入查询?

您可以使用函数:

CREATE OR REPLACE FUNCTION insert_party(
    _title text, _venue text, _date date,
    _list text, _Amount_list text
)
RETURNS void AS
$BODY$
begin
    with cte as (
       insert into partyList(Party_title, Party_venue, Party_date, Party_list, Amount_list)
       values (_title, _venue, _date, _list, _Amount_list)
       returning sno
    ), cte2 as (
       select
           sno,
           regexp_split_to_table(_list, ';') as participant_name,
           regexp_split_to_table(_Amount_list, ';') as amount_paid
       from cte
    )
    insert into list (sno, participant_name, amount_paid)
    select sno, participant_name, amount_paid::int
    from cte2
    where participant_name is not null and participant_name <> '';
end;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;

实际上,可以将此函数编写为SQL而不是plpgsql,正如您所看到的,它只是一条语句。

它帮助了我!谢谢你:-我正在处理这类主题本身,如果我对此不清楚,那么我会发短信给你。我们可以将返回的sno值存储到一个变量中吗,因为这有助于我在作业中更进一步。谢谢,我正在尝试插入两列列表中的值。在这两列列表之间要做很多比较。一旦我清楚地了解了我的流程,我会要求你提供指导方针。如果在这个senario中我有一个整数列表,那么如何将它们拆分并插入到另一个表中..我编辑了这个问题?我尝试在查询中进行一些更改,但遇到一个错误:列amount\u paid的类型为integer,但表达式的类型为text^提示:您需要重写或强制转换表达式。
 | SNO | PARTY_TITLE |    PARTY_VENUE |                    PARTY_DATE |                                                         PARTY_LIST |             |AMOUNT_LIST
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    |   1 |       games | indoor stadium | August, 10 2013 00:00:00+0000 |            ronald;sania;sachin;pointing;samueal;gibbs;gayle;smith; |  100;200;100;100;200;100;100;100; |
    |   2 |       dance |          stage | August, 15 2013 00:00:00+0000 | micheal jakson; britney ; daddy yankee; ar rehaman; jestin bebber; |200;100;100;200;100; |
| SNO | PARTICIPANT_NAME | AMOUNT_lIST
---------------------------------------
|   1 |           ronald |      100
|   1 |            sania |      200
|   1 |           sachin |      100
|   1 |         pointing |      100
|   1 |          samueal |      200
|   1 |            gibbs |      100
|   1 |            gayle |      100
|   1 |            smith |      100
|   2 |   micheal jakson |      200
|   2 |          britney |      100
|   2 |     daddy yankee |      100
|   2 |       ar rehaman |      200
|   2 |    jestin bebber |      100
insert_function('games','indoor stadium','08-10-2013','ronald;sania;sachin;pointing;samueal;gibbs;gayle;smith;','100;200;100;100;200;100;100;100;'),
('dance','stage','08-15-2013','micheal jakson; britney ; daddy yankee; ar rehaman; jestin bebber;','200;100;100;200;100;');
CREATE OR REPLACE FUNCTION insert_party(
    _title text, _venue text, _date date,
    _list text, _Amount_list text
)
RETURNS void AS
$BODY$
begin
    with cte as (
       insert into partyList(Party_title, Party_venue, Party_date, Party_list, Amount_list)
       values (_title, _venue, _date, _list, _Amount_list)
       returning sno
    ), cte2 as (
       select
           sno,
           regexp_split_to_table(_list, ';') as participant_name,
           regexp_split_to_table(_Amount_list, ';') as amount_paid
       from cte
    )
    insert into list (sno, participant_name, amount_paid)
    select sno, participant_name, amount_paid::int
    from cte2
    where participant_name is not null and participant_name <> '';
end;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;