2010-06-27 6 views
1

나는 기능 날대학원의 함수에 전달 된 열 이름을 결정

SELECT foo('a', a) FROM table WHERE 

같은 물건을 수행 할 수 있도록

CREATE OR REPLACE FUNCTION foo(colname TEXT, col INT) 
    RETURNS REAL AS $$ 
    BEGIN 
     IF (colname = 'a') THEN 
      RETURN (col * 1.5); 
     ELSIF (colname = 'b') THEN 
      RETURN (col * 2.5); 
     ELSIF (colname = 'c') THEN 
      RETURN (col * 3.5); 

     .. and so on .. 

     ELSE 
      RAISE EXCEPTION 'Invalid column!'; 
     END IF; 
     RETURN NULL; 
    END; 
    $$ 
    LANGUAGE plpgsql; 

같은 PL/pgSQL의 기능이 나는이 친절하고 싶습니다있다 , 그리고 도움이된다면 열 이름을 전달할 필요가 없습니다. 즉, 나는

SELECT foo(a) FROM table WHERE 

을하고 함수에 전달 된 COL에 따라 함수에서 열 이름을 알아낼 수 있도록하고 싶습니다. 그게 가능하니?

답변

1

아니요. 함수에 전달되는 값은 표현식의 결과 값입니다. 표현식이 단일 열 이름 인 경우에는 아무런 차이가 없습니다. 이렇게 쿼리를 작성한다면 어떨까요?

SELECT foo(a+2) FROM table WHERE ... 

아니면?

SELECT foo(2+2) FROM table WHERE ... 

이러한 경우에 함수 유추는 무엇입니까?