2017-11-30 1 views
2

분류 자 ​​테이블에서 lookup_type 값을 사용하여 값을 적절한 유형으로 변환하려고합니다.plpgsql에서 변수를 필드 유형으로 사용하는 방법은 무엇입니까?

        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').

변수를 유형으로 사용하는 데 문제가 있습니다.

psql의 시험 :

내가 plpgsql에서이 작업을 수행하기 위해 노력하고있어으로
select cast('1' as integer); --> OK 

select cast('1' as 'integer'); 
ERROR: syntax error at or near "'integer'" 

, 나는 두 가지 옵션이 있습니다, 방법이 문제를 해결하려면 다음

1)

EXECUTE 'SELECT CAST($1 AS ' || 'boolean' || ')' 
    INTO value                
USING 'true'; 

2) 캐스팅 된 값을 반환하는 ifs가 많은 함수 만들기 예 IF type = 'boolean' THEN return 'value'::boolean

이 문제에 대한 좀 더 우아한 해결책이 있습니까?

+0

을, 함수는 행할 수없는 :) – user1190411

+0

와서 다른 사람 답변자 사람 : 아래로 이동하지 마십시오 "아마도 어쩌면 레코드를 반환하는 함수를 가질 수 있습니다."- 그런 함수의 출력을 사용할 때 어쨌든 캐스트를 지정해야한다는 것을 기억하기 전에 잠시 머뭇 거리게되었습니다. – Scoots

답변

1

해결책 1)은 대부분 올바른 답변입니다.

나는 우아한 해결책이 있다고 생각하지 않습니다.

가 작성 확보하려면 : 그것은 특정 반환 형식을 가지고 있어야로 두 번째 생각에

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

필자는 anyelement를 사용하여 몰핑 함수를 살펴 보았습니다. 그러나 두 번째 요소를 regtype으로 입력해야했습니다. 변수로 생성 할 수는 없습니다. 그래서 이것은 또 다른 막 다른 길입니다. – user1190411

+0

Pg가 일반적인 형식 유형을 좋아하지 않는다고합니다. 부울을 int로 바꾼 bool과 smallint로 바꾸어야했습니다. 그런 다음 형식이 괜찮습니다. – user1190411

+0

고마워. –

관련 문제