पर लौटने के लिए मेरे पास PostgreSQL 8.4 में संग्रहीत प्रक्रिया है जो एक पैरामीटर के रूप में पारित पूर्णांक मान के आधार पर एक और संग्रहीत प्रक्रिया को कॉल करता है। उन संग्रहित प्रक्रियाओं को ऐसे कहा जाता है कि उन्हें एक पूर्णांक कॉलम के साथ संबंध वापस करना चाहिए। मेरी समस्या यह है कि बाहरी संग्रहित प्रक्रिया हमेशा पंक्तियों की सही संख्या के साथ संबंध रखती है लेकिन सभी आईडी के पूर्ण के साथ।पुनर्नवीनीकरण तालिका (आईडी पूर्णांक) के साथ PostgreSQL संग्रहीत प्रक्रिया सभी NULLs
यहाँ संग्रहीत प्रक्रिया इसके सरलतम रूप के लिए कम हो जाता है:
CREATE OR REPLACE FUNCTION spa(count integer)
RETURNS TABLE (id integer) AS $$
BEGIN
RETURN QUERY SELECT generate_series(1, count);
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION spb(count integer)
RETURNS TABLE (id integer) AS $$
BEGIN
RETURN QUERY SELECT generate_series(1, count);
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION conditional_relation_return(objectType integer, count integer)
RETURNS TABLE (id integer) AS $$
BEGIN
IF objectType = 1 THEN
RETURN QUERY SELECT id FROM spa(count);
ELSIF objectType = 2 OR objectType = 3 THEN
RETURN QUERY SELECT id FROM spb(count);
END IF;
END;
$$ LANGUAGE plpgsql;
और यदि आप इसे कहते हैं:
# select * from conditional_relation_return(1, 2);
id
----
(2 rows)
या अधिक विशेष रूप से:
# select count(*) from conditional_relation_return(1, 2) where id is null;
count
-------
2
(1 row)
लेकिन अगर आप फोन संदर्भित संग्रहीत प्रक्रियाओं में से एक, आपको सही परिणाम मिलते हैं:
# select * from spa(2);
id
----
1
2
(2 rows)
तो क्यों conditional_relation_return सभी एनयूएलएल वापस करता है?
कैसे हास्यास्पद। तुम सही हो। 8.4 चुपचाप संदिग्ध आईडी त्रुटि निगलता है। धन्यवाद! – drsnyder