如何在plpgsql中使用变量作为字段类型?

时间:2017-11-30 12:31:56

标签: sql postgresql plpgsql

我尝试使用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等。

这个问题有更优雅的解决方案吗?

1 个答案:

答案 0 :(得分:1)

你的解决方案1)大多是正确的。

我认为没有一个优雅的解决方案。

为了确保安全,请写下:

EXECUTE format('SELECT CAST($1 AS %I)', 'bool')
   INTO value                                                              
   USING 'true';