ORA-00972 पहचानकर्ता बहुत लंबा उपनाम स्तंभ नाम है


81

मेरे पास एक प्रश्न है:

SELECT column as averyveryveryverylongalias (more than 30 characters)
   FROM Table_name

यह ORA-00972 पहचानकर्ता को त्रुटि देता है बहुत लंबा है , क्या यह उर्फ ​​को कम किए बिना काम करने के लिए कोई टिप है?

धन्यवाद

जवाबों:


104

नहीं, Oracle संस्करण 12.2 से पहले, पहचानकर्ताओं को लंबाई में 30 वर्णों से अधिक की अनुमति नहीं है। Oracle SQL भाषा संदर्भ देखें ।

हालांकि, संस्करण 12.2 से वे 128 बाइट तक लंबे हो सकते हैं। (नोट: बाइट्स, वर्ण नहीं)।


23
जिज्ञासा से बाहर, क्या किसी को पता है कि यह सीमा कहाँ से आती है, और कैसे सीमा आती है कभी आराम नहीं किया गया? यह वास्तव में मुझ पर प्रहार करता है कि ओरेकल के करोड़ों डॉलर का भुगतान करने वाले ग्राहकों में से किसी ने भी इस तरह की सुविधा का अनुरोध नहीं किया है (अब मुझे गलत मत समझो, मुझे पूरा यकीन है कि कुछ गहरे तकनीकी कारण हैं, लेकिन फिर भी ..)
phtrivier

10
ठीक है, मैं SO से पूछ सकता था: stackoverflow.com/questions/1378133/…
phtrivier

मुझे भी इस स्थिति का सामना करना पड़ा। मेरे पास नाम लंबाई = 32 के साथ एक तालिका स्तंभ है। लेकिन क्यों पृथ्वी पर एक तालिका स्तंभ नाम 30 से अधिक वर्ण होने की अनुमति है, जबकि एक ही समय में एक पहचानकर्ता नहीं है? इन सीमाओं को हाथ से जाना चाहिए, है ना? यह स्थिति आखिर कैसे पैदा हो सकती है?
वेरिंग

@ क्या यह 30 से अधिक अक्षर या 30 से अधिक बाइट्स है? एक अजीब बग है जहां एक पहचानकर्ता 30 बाइट्स से थोड़ा अधिक हो सकता है यदि अंतिम चरित्र मल्टी-बाइट है।
जॉन हेलर

@ जॉनलर: मुझे पूरा यकीन है कि यह
30/32

12

त्रुटि भी उद्धरण और एकल qutoes के quirky हैंडलिंग के कारण होता है। क्वेरी के अंदर एकल उद्धरण शामिल करने के लिए, एकल उद्धरणों का दोगुना उपयोग करें।

यह काम नहीं करेगा

select dbms_xmlgen.getxml("Select ....") XML from dual;

या यह

select dbms_xmlgen.getxml('Select .. where something='red'..') XML from dual;

लेकिन यह काम नहीं करता है

select dbms_xmlgen.getxml('Select .. where something=''red''..') XML from dual;

मार्कअप ने मेरे उदाहरण को बदल दिया, यह कुछ समान होना चाहिए एकल उद्धरण एकल उद्धरण लाल एकल उद्धरण एकल उद्धरण
माइक कमिंग्स

5

वह ऑब्जेक्ट जहां ओरेकल पहचानकर्ताओं के नाम को संग्रहीत करता है (उदाहरण के लिए उपयोगकर्ता के तालिका नाम USER_TABLES के रूप में नामित तालिका में संग्रहीत किए जाते हैं और उपयोगकर्ता के स्तंभ नाम USER_TAB_COLUMNS के रूप में नामित तालिका में संग्रहीत किए जाते हैं) में NAME कॉलम होते हैं (जैसे TABLE_NAME) आकार का USER_TABLES में) Varchar2 (30) ... और यह वस्तुओं या पहचानकर्ताओं की सभी प्रणाली तालिकाओं के माध्यम से समान है -

 DBA_ALL_TABLES         ALL_ALL_TABLES        USER_ALL_TABLES
 DBA_PARTIAL_DROP_TABS  ALL_PARTIAL_DROP_TABS USER_PARTIAL_DROP_TABS
 DBA_PART_TABLES        ALL_PART_TABLES       USER_PART_TABLES 
 DBA_TABLES             ALL_TABLES            USER_TABLES           
 DBA_TABLESPACES        USER_TABLESPACES      TAB
 DBA_TAB_COLUMNS      ALL_TAB_COLUMNS         USER_TAB_COLUMNS 
 DBA_TAB_COLS         ALL_TAB_COLS            USER_TAB_COLS 
 DBA_TAB_COMMENTS     ALL_TAB_COMMENTS        USER_TAB_COMMENTS 
 DBA_TAB_HISTOGRAMS   ALL_TAB_HISTOGRAMS      USER_TAB_HISTOGRAMS 
 DBA_TAB_MODIFICATIONS  ALL_TAB_MODIFICATIONS USER_TAB_MODIFICATIONS 
 DBA_TAB_PARTITIONS   ALL_TAB_PARTITIONS      USER_TAB_PARTITIONS

5

मैं एक फ्रंट एंड के रूप में आर्गोस रिपोर्टिंग सिस्टम का उपयोग कर रहा हूं और पीछे ओरेकल का। मुझे बस इस त्रुटि का सामना करना पड़ा और यह शुरुआत में एक दोहरे उद्धरण के साथ एक स्ट्रिंग और अंत में एक एकल उद्धरण के कारण हुआ। एकल के साथ दोहरे उद्धरण को हल करने से समस्या हल हो गई।


0

यदि आपने हाल ही में स्प्रिंगबूट को 1.4.3 में अपग्रेड किया है, तो आपको yml फ़ाइल में परिवर्तन करने की आवश्यकता हो सकती है:

1.3 में yml:

jpa: 
  hibernate: 
    namingStrategy: org.hibernate.cfg.EJB3NamingStrategy

१.४.३ में yml:

jpa: 
  hibernate: 
    naming: physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

-2

जैसा कि अन्य ने बताया है, ओरेकल एसक्यूएल में नाम 30 वर्णों से कम या बराबर होना चाहिए। मैं यह जोड़ना चाहूंगा कि यह नियम केवल टेबल नामों पर ही नहीं बल्कि फील्ड नामों पर भी लागू होता है। इसलिए यह अब आपके पास है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.