2010-06-27 69 views
1

我有一個PL/pgSQL裏,像這樣確定傳遞給PG功能列名

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; 

功能該功能可以讓我做的東西一樣

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

我想使這個更好,而不必傳遞列名,如果我能幫助它。換句話說,我希望能夠做到

SELECT foo(a) FROM table WHERE 

並根據傳遞給函數的col找出函數中的列名。那可能嗎?

回答

1

否。傳遞給函數的內容只是表達式結果的值。這不會影響你的表達恰好是一個單一的列名。如果你要這樣寫查詢呢?

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

或者這個?

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

該函數推斷的是這些情況下的列名稱?