表 :table_name create table table_name ( given_dates timestamp, set_name varchar ); 插入logging : insert into table_name values('2001-01-01'),('2001-01-05'),('2001-01-10'), ('2001-01-15'),('2001-01-20'),('2001-01-25'), ('2001-02-01'),('2001-02-05'),('2001-02-10'), ('2001-02-15'); 现在我想更新一些date的set_name。 例如 : 我想要这样更新表格: given_dates set_name ———————- 2001-01-01 s1 2001-01-05 s1 2001-01-10 s2 2001-01-15 s2 2001-01-20 2001-01-25 2001-02-01 2001-02-05 2001-02-10 2001-02-15 注意 : given_dates和set_name是传递参数,因为它们是dynamic的。 我可以按照上面s1,s2通过2台s1,s2也可以按要求通过4台。 所以我需要dynamic的case语句来更新set_name 。 给定两个参数 : declare p_dates varchar := '2001-01-01to2001-01-05,2001-01-10to2001-01-15'; declare […]
这是plpgsql函数的一个变体, 它返回多个被多次调用的列 。 但是,我希望find一个解决我的特定情况。 我有一个函数,用给定的参数处理行数组,并返回一组行+一个新的列。 CREATE OR REPLACE foo(data data[], parameter int) RETURNS SETOF enhanceddata AS … 该function仅对一组数据有效 SELECT * FROM foo( (SELECT ARRAY_AGG(data) FROM datatable GROUP BY dataid WHERE dataid = something), 1) 但我想使它与多组数据一起工作,而不将数据传递给函数。 我尝试了一些变化: SELECT dataid, (foo(ARRAY_AGG(data)),1).* FROM dataset WHERE dataid = something — only testing on 1 GROUP BY dataid 但是这个函数被每一列调用一次。
我的最后一个问题传递一个数组存储到postgres是有点不清楚。 现在,澄清我的目标: 我想创build一个Postgres存储过程,它将接受两个input参数。 其中一个是一些金额的列表,例如(100, 40.5, 76) ('01-2222-05','01-3333-04','01-4444-08') (100, 40.5, 76) ,另一个是一些发票清单 ('01-2222-05','01-3333-04','01-4444-08') 。 之后,我想使用这两个数字和字符列表,并与他们做一些事情。 例如,我想从这个数组中获取每个金额,并将其分配给相应的发票。 在Oracle中类似这样的东西: SOME_PACKAGE.SOME_PROCEDURE ( 789, SYSDATE, SIMPLEARRAYTYPE ('01-2222-05','01-3333-04','01-4444-08'), NUMBER_TABLE (100,40.5,76), 'EUR', 1, P_CODE, P_MESSAGE); 当然,这两种typesSIMPLEARRAYTYPE和NUMBER_TABLE是在DB中定义的。