2016-03-22 24 views
0

2 sütunlu bir tablom var. İlk bir seri ve 2. metin olarak saklanan bir sorgudur. Soruya daha basit bir şekilde, sonunda: Bir parametre olarak seri numarasını gireceğim bir fonksiyon yaratmayı ve fonksiyonun bana 2. sütunda bulunan sorgu sonucunu geri getirmesini istiyorum.Sorguyu metin olarak çalıştır

Yığında gördüğüm diğer sorulardan 'execute' komutunu kullanmam gerektiğini biliyorum. a = 4 olduğu

CREATE OR REPLACE FUNCTION public.try1() 
RETURNS TABLE(datery timestamp without time zone) 
LANGUAGE plpgsql 
AS $function$ 
declare 
stmt text; 
BEGIN 
     stmt :='SELECT b FROM chks where a=4'; 
      RETURN QUERY 
    execute stmt ; 
END 
$function$ 

bu sorgunun sonucu b formu CHKS seçmek:

bile sonuca önce, bu basit işlevi yapılan

'şimdi seçmek() :: zaman damgası zaman dilimi olmadan '

İşlevi çalıştırdığımda, hata giderme işleminin varchar olduğunu ve zaman damgası olmadığını söyleyen döküm hatası alıyorum ve dönüş türünü varchar olarak değiştirirsem sonuç olarak sorguyu kendim alıp Sorgunun sonucu.

Burada nelerin eksik?

Her durumda, bunu yapmanın daha basit bir yolu var mı? Bunu hem basit işlevim hem de daha önce bahsettiğim parametreyle ilgili işlev için soruyorum. Böyle

+0

kayıtlı tüm sorgular mı aynı tipte aynı sayıda sütun döndürür? –

+0

@Igor - evet öyle. – Balinti

cevap

1

deneyin şey:

CREATE OR REPLACE FUNCTION public.try1(query_number numeric) 
    RETURNS TABLE(datery timestamp without time zone) 
AS $function$ 
DECLARE 
stmt text; 
BEGIN 
    SELECT b INTO stmt 
    FROM chks 
    WHERE a=query_number; 
    RETURN QUERY EXECUTE stmt; 
END 
$function$ 
LANGUAGE plpgsql STRICT; 
İlgili konular