postgresql – EXECUTE … INTO … PL / pgSQL中的USING语句无法
我正在尝试在PL / pgSQL中编写一个函数区域,它循环遍历hstore并将记录的列(hstore的键)设置为特定值(hstore的值).我正在使用Postgres 9.1.
hstore看起来像:’“column1”=>“value1”,“column2”=>“value2”’ 一般来说,这是我想要的一个函数,它接受一个hstore并且有一个带有要修改的值的记录: FOR my_key,my_value IN SELECT key,value FROM EACH( in_hstore ) LOOP EXECUTE 'SELECT $1' INTO my_row.my_key USING my_value; END LOOP; 我在这段代码中得到的错误: “myrow”没有字段“my_key”.我一直在寻找解决方案已经有一段时间了,但是我试图获得相同结果的其他一切都没有奏效. 解决方法
比您发布的答案更简单的替代方案.应该表现得更好.
此函数从给定表(in_table_name)和主键值(in_row_pk)中检索一行,并将其作为新行插入到同一个表中,并替换一些值(in_override_values).返回默认的新主键值(pk_new). CREATE OR REPLACE FUNCTION f_clone_row(in_table_name regclass,in_row_pk int,in_override_values hstore,OUT pk_new int) AS $func$ DECLARE _pk text; -- name of PK column _cols text; -- list of names of other columns BEGIN -- Get name of PK column SELECT INTO _pk a.attname FROM pg_catalog.pg_index i JOIN pg_catalog.pg_attribute a ON a.attrelid = i.indrelid AND a.attnum = i.indkey[0] -- 1 PK col! WHERE i.indrelid = 't'::regclass AND i.indisprimary; -- Get list of columns excluding PK column _cols := array_to_string(ARRAY( SELECT quote_ident(attname) FROM pg_catalog.pg_attribute WHERE attrelid = in_table_name -- regclass used as OID AND attnum > 0 -- exclude system columns AND attisdropped = FALSE -- exclude dropped columns AND attname <> _pk -- exclude PK column ),','); -- INSERT cloned row with override values,returning new PK EXECUTE format(' INSERT INTO %1$I (%2$s) SELECT %2$s FROM (SELECT (t #= $1).* FROM %1$I t WHERE %3$I = $2) x RETURNING %3$I',in_table_name,_cols,_pk) USING in_override_values,in_row_pk -- use override values directly INTO pk_new; -- return new pk directly END $func$LANGUAGE plpgsql; 呼叫: SELECT f_clone_row('t',1,'"col1"=>"foo_new","col2"=>"bar_new"'::hstore); SQL Fiddle. >使用 >使用子选择中的 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ruby-on-rails – 如何使用ActionMailer获取电子邮件正文
- PIX 通过ASDM5.0远程升级pix Version 7.0(4)为pix
- oracle – 使用sqlldr将数据加载到远程数据库
- Who Stole gettimeofday() System Calls From Oracle strac
- oracle索引 总结
- oracle数据库 中to_number()、to_char()、to_date()用法介绍
- xml常用四种解析方式优缺点的分析
- 我的SBJson来生成和解析JSON串的代码
- c – 自动生成功能存根
- 如何从R对象创建xml,例如,是否有“listToXml”函数?