我想通过在PL / SQL函数中通过文本变量传递的名称访问对象的字段/属性。例如,代替:
obj.fieldA
我想做类似的事情:
obj['fieldA']
有没有一种方法可以在PL / SQL中完成?我正在使用Postgres,所以也许我应该说PL / pgSQL,但我希望存在通用语法。
答案 0 :(得分:1)
我知道,编译语言PL / SQL不允许使用它。通常,这是动态语言的功能。 PLpgSQL也不支持此功能,但是解决方法很少:
动态SQL
CREATE TABLE foo(a int, b varchar, c date);
INSERT INTO foo VALUES(10, 'Hello', CURRENT_DATE);
DO $$
DECLARE
foo_rec foo%ROWTYPE;
colname text DEFAULT 'b';
value text;
BEGIN
SELECT * FROM foo INTO foo_rec;
EXECUTE format('SELECT ($1).%I::text', colname) INTO value USING foo_rec;
RAISE NOTICE '% = %', colname, value;
END;
$$;
转换为JSON
并从JSON
值中读取值
DO $$
DECLARE
foo_rec foo%ROWTYPE;
colname text DEFAULT 'b';
j json;
BEGIN
SELECT * FROM foo INTO foo_rec;
j := row_to_json(foo_rec);
RAISE NOTICE '% = %', colname, j->>colname;
END;
$$;
今天使用JSON
是最舒适的方法。