相关疑难解决方法(0)

如何使用动态SQL设置复合变量字段的值

鉴于此类型:

-- Just for testing purposes:
CREATE TYPE testType as (name text)
Run Code Online (Sandbox Code Playgroud)

我可以使用此函数动态获取字段的值:

CREATE OR REPLACE FUNCTION get_field(object anyelement, field text) RETURNS text as
$BODY$
DECLARE
    value text;
BEGIN
    EXECUTE 'SELECT $1."' || field || '"'
      USING object
       INTO value;

    return value;
END;
$BODY$
LANGUAGE plpgsql
Run Code Online (Sandbox Code Playgroud)

呼叫get_field('(david)'::testType, 'name')按预期工作返回"大卫".

但是如何在复合类型中设置字段的值?我试过这些功能:

CREATE OR REPLACE FUNCTION set_field_try1(object anyelement, field text, value text)
RETURNS anyelement
as
$BODY$
DECLARE
    value text;
BEGIN
    EXECUTE '$1."' || field || '" := $2'
      USING object, value; …
Run Code Online (Sandbox Code Playgroud)

postgresql types stored-procedures composite plpgsql

12
推荐指数
3
解决办法
2万
查看次数

使用动态字段名称触发

我在更新表上创建PostgreSQL(9.3)触发器时遇到问题.我想在循环中设置新值

EXECUTE 'NEW.'|| fieldName || ':=''some prepend data'' || NEW.' || fieldName || ';';
Run Code Online (Sandbox Code Playgroud)

其中fieldName是动态设置的.但是这个字符串引发错误

ERROR:  syntax error at or near "NEW"
Run Code Online (Sandbox Code Playgroud)

我该如何实现这一目标?

postgresql triggers dynamic-sql plpgsql postgresql-9.3

5
推荐指数
2
解决办法
2318
查看次数