2015-12-08 50 views
0

我知道這有點牽強附會的問題,但它是否可以以任何方式進行跟蹤?在SQL語句中使用列作爲模式名稱

select cc.schema, 
     (select exists(select * 
        from (select cc.schema).helpers cs 
        where cs.chain_id=cc.id) 
    ) as hasHelpers 
from customer.chain cc 
where cc.id=$1 

我想要做的是將cc.schema轉換爲存在語句中的模式名稱!這是可能的和如何?

如果我嘗試了上述我得到一個錯誤來運行聲明:

subquery in FROM must have an alias .... from (select cc...

+0

一種方法是編寫一個函數,它將檢查shema是否存在,然後如果存在執行'select * from''|| $ 1 ||''。helpers cs where cs.chain_id =''$ 2'')'into ...檢查值是否存在 –

回答

0

需要在此動態SQL。我建議一個功能:

CREATE OR REPLACE FUNCTION f_chk_schemas(_id integer) 
    RETURNS TABLE (schema text, schema_exists bool, has_helpers bool) AS 
$func$ 
BEGIN 
    FOR schema, schema_exists, has_helpers IN 
     SELECT cc.schema, to_regclass(quote_ident(cc.schema) || '.helpers') IS NOT NULL 
     FROM customer.chain cc 
     WHERE cc.id = $1 
    LOOP 
     IF schema_exists THEN 
     EXECUTE format('SELECT EXISTS (SELECT 1 FROM %I.helpers WHERE id = $1)', schema) 
     USING $1 
     INTO has_helpers; 
     END IF; 

     RETURN NEXT; 
    END LOOP; 
END 
$func$ LANGUAGE plpgsql; 

相關:

相關問題