我尝试使用classificator表中的lookup_type值将值转换为适当的类型。
Table "public.classificator"
Column | Type | Collation | Nullable | Default
------------------+--------+-----------+----------+-------------------------------------------
classificator_id | bigint | | not null | nextval('classificator_id_seq'::regclass)
classificator | text | | not null |
lookup | text | | not null |
description | text | | |
lookup_value | text | | |
lookup_type | text | | |
我会使用例如值(' SYSTEM_SETTINGS',' daylight_saving_enabled','为系统使用夏令时',' true' ;,'布尔')。
我在使用变量作为类型时遇到了麻烦。
psql test:
select cast('1' as integer); --> OK
select cast('1' as 'integer');
ERROR: syntax error at or near "'integer'"
由于我试图在plpgsql中执行此操作,我有2个选项,如何解决此问题:
1)
EXECUTE 'SELECT CAST($1 AS ' || 'boolean' || ')'
INTO value
USING 'true';
2)创建一个包含大量ifs的函数,返回已转换的值
例如IF type = 'boolean' THEN return 'value'::boolean
等。
这个问题有更优雅的解决方案吗?
答案 0 :(得分:1)
你的解决方案1)大多是正确的。
我认为没有一个优雅的解决方案。
为了确保安全,请写下:
EXECUTE format('SELECT CAST($1 AS %I)', 'bool')
INTO value
USING 'true';