विभिन्न विकल्प।
शुद्ध SQL . में "चर" रखने के लिए CTE में पैरामीटर प्रदान करें :
WITH var(lastname) AS (SELECT 'Troy'::varchar(16))
SELECT *
FROM users, var v
WHERE lastname = v.lastname;
यह किसी भी . के लिए काम करता है query.
CTE var
. के बाद से एक एकल पंक्ति holds रखता है इसे CROSS JOIN
के साथ जोड़ना सुरक्षित है FROM खंड के अंत में - वास्तव में अल्पविराम के बाद इसे जोड़ने के साथ संक्षिप्त रूप सबसे अच्छा हो सकता है क्योंकि स्पष्ट रूप से शामिल वाक्यविन्यास अल्पविराम से पहले बांधता है। अतिरिक्त तालिका उपनाम v
वाक्य रचना को और छोटा करने के लिए वैकल्पिक है।
या सीटीई के बिना सस्ता। BTW, क्यों varchar(16)
? बस text
का उपयोग करें :
SELECT *
FROM users
JOIN (SELECT 'Troy'::text) var(lastname) USING (lastname)
WHERE lastname = var.lastname;
या अस्थायी तालिका . का उपयोग करें सभी . के लिए समान भूमिका निभाने के लिए एक ही सत्र के भीतर प्रश्न। सत्र के अंत के साथ अस्थायी तालिकाएँ समाप्त हो जाती हैं।
CREATE TEMP TABLE var AS
SELECT text 'Troy' AS lastname;
ANALYZE var; -- temp tables are not covered by autovacuum
SELECT * FROM users JOIN var USING (lastname);
- अस्थायी तालिकाओं के बारे में और
autovacuum
या आप DO
. का उपयोग कर सकते हैं @Houari जैसे बयान यहां दिए गए या पसंद किए गए:
- PostgreSQL बाहरी कार्यों को लूप करता है। क्या यह संभव है?
ध्यान दें कि आप DO
. से मान वापस नहीं कर सकते बयान। (आप RAISE ...
. का उपयोग कर सकते हैं हालांकि।) और आप SELECT
. का उपयोग नहीं कर सकते हैं plpgsql में लक्ष्य के बिना - DO
. में डिफ़ॉल्ट प्रक्रियात्मक भाषा बयान। बदलें SELECT
PERFORM
. के साथ परिणामों को दूर करने के लिए।
या आप अनुकूलित विकल्प . का उपयोग कर सकते हैं , जिसे आप postgresql.conf
. में सेट कर सकते हैं दृश्यमान होने के लिए विश्व स्तर पर ।
या सत्र की अवधि के लिए और केवल उसी सत्र में . दृश्यमान होने के लिए अपने सत्र में सेट करें :
SET my.lastname = 'Troy';
चर नाम चाहिए एक बिंदु शामिल करें। आप text
. तक सीमित हैं इस तरह डेटा प्रकार के रूप में, लेकिन किसी भी डेटा प्रकार को text
. के रूप में दर्शाया जा सकता है ...
आप current_setting('my.lastname')
. का उपयोग कर सकते हैं मूल्य अभिव्यक्ति के रूप में। जरूरत पड़ने पर कास्ट करें। उदाहरण के लिए:current_setting('my.json_var')::json
...
या SET LOCAL
का उपयोग करें प्रभाव केवल वर्तमान लेन-देन . तक बने रहने के लिए . देखें:
- यूज़र आईडी को PostgreSQL ट्रिगर में पास करना
या आप छोटे IMMUTABLE
. का उपयोग कर सकते हैं कार्य वैश्विक . के रूप में निरंतर चर जो केवल विशेषाधिकार प्राप्त उपयोगकर्ता ही हेरफेर कर सकते हैं। देखें:
- क्या PostgreSQL क्वेरी में नामित स्थिरांक को परिभाषित करने का कोई तरीका है?
या क्लाइंट के रूप में psql के साथ काम करते समय, \set
. का उपयोग करें या \gset
मेटा-कमांड और परिवर्तनीय प्रतिस्थापन।