PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

रिपोजिटरी - मूल क्वेरी में आदेश काम नहीं कर रहा है

यदि यह एक तैयार कथन है, और यह ORDER BY में आपूर्ति की जा रही एक बाइंड वैल्यू है खंड, जो मान्य है, लेकिन...

आपूर्ति किए गए बाइंड मान की व्याख्या SQL टेक्स्ट के रूप में नहीं की जाएगी। अर्थात्, मान को केवल एक मान (एक शाब्दिक स्ट्रिंग की तरह) के रूप में देखा जाएगा। इसे कॉलम नाम या ASC . के रूप में नहीं देखा जाएगा या DESC कीवर्ड।

आपके कथन के संदर्भ में, :orderClause . के लिए एक मान प्रदान करना बाइंड प्लेसहोल्डर, इसका वही प्रभाव होने वाला है जैसे कि आपने ORDER BY 'some literal' लिखा था ।

और यह वास्तव में पंक्तियों का कोई क्रम नहीं कर रहा है।

(यह कम से कम प्रत्येक SQL क्लाइंट लाइब्रेरी में सच है जिसका मैंने DB2, Teradata, Oracle, SQL Server, MySQL, और MariaDB (JDBC, Perl DBI, ODBC, Pro/C, et al।)

के साथ उपयोग किया है।

(MyBatis SQL पाठ के भीतर परिवर्तनशील प्रतिस्थापन करने के लिए एक सुविधाजनक तंत्र प्रदान करता है, तैयार होने से पहले SQL पाठ को गतिशील रूप से बदल रहा है, लेकिन उन प्रतिस्थापनों को कथन तैयार होने से पहले संभाला जाता है, और कथन में बाइंड प्लेसहोल्डर में नहीं बदलते हैं।)

ORDER BY खंड में कुछ सावधानीपूर्वक तैयार किए गए भावों के साथ "गतिशील" क्रम का कुछ अंश प्राप्त करना संभव है। उदाहरण के लिए, हम अपने स्थिर SQL टेक्स्ट को कुछ इस तरह रख सकते हैं:

  ORDER BY CASE WHEN :sort_param = 'name ASC'  THEN activation_name END ASC
         , CASE WHEN :sort_param = 'name DESC' THEN activation_name END DESC

(यहाँ SQL पाठ गतिशील नहीं है, यह वास्तव में स्थिर है, ऐसा लगता है जैसे हमने लिखा था।

 ORDER BY expr1 ASC
        , expr1 DESC

"ट्रिक" यह है कि ORDER BY क्लॉज में अभिव्यक्तियाँ सशर्त रूप से प्रत्येक पंक्ति से कुछ कॉलम का मान लौटा रही हैं, या वे एक बाइंड के मूल्य के आधार पर एक शाब्दिक (उपरोक्त उदाहरण में, शाब्दिक NULL) लौटा रहे हैं। मूल्य, निष्पादन समय पर मूल्यांकन किया गया।

शुद्ध प्रभाव यह है कि हम "गतिशील रूप से" इनमें से किसी का भी प्रभाव प्राप्त कर सकते हैं:

 ORDER BY activation_name ASC, NULL DESC

या

 ORDER BY NULL ASC, activation_name DESC

या

 ORDER BY NULL ASC, NULL DESC

इस पर निर्भर करता है कि हम :sort_param प्लेसहोल्डर के लिए किस मूल्य की आपूर्ति करते हैं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. अवैध निर्देश:4 Django चलाते समय

  2. PostgreSQL क्वेरी से sqlalchemy के साथ पंडों का डेटाफ्रेम लौटाएं

  3. एक PostgreSQL क्वेरी कैसे करें जहां-इन क्लॉज जिसमें प्रोग्रामेटिक रूप से एकाधिक कॉलम होते हैं?

  4. [] गॉर्म और पोस्टग्रेज के साथ jsonb को स्ट्रिंग

  5. Postgresql:गलत डेटा लौटाने वाली क्वेरी