2011-04-19 17 views
19

हाइबरनेट एसक्यूएल क्वेरी निष्पादित करते समय मुझे एक त्रुटि दिखाई देती है।कॉलम मौजूद होने पर भी ORA-00904 क्यों है?

java.sql.SQLException: ORA-00904: "table_name"."column_name": invalid identifier

जब मैं वर्गधारक में तालिका खोलता हूं, तो स्तंभ मौजूद होता है।

त्रुटि केवल प्रोड में हो रही है, DEV में नहीं।

मुझे क्या जांचना चाहिए?

+1

क्या आप क्वेरी पोस्ट कर सकते हैं? –

+0

मेरा मानना ​​है कि बड़ा मुद्दा कॉलम को उत्पादन डीबी – V4Vendetta

+0

@ कौशिक में नहीं बनाया गया था .. क्या आपने इस मुद्दे का कारण पता लगाया था? –

उत्तर

18

यह एक केस-सेंसिटीविटी समस्या हो सकती है। आम तौर पर टेबल और कॉलम केस संवेदनशील नहीं होते हैं, लेकिन यदि आप उद्धरण चिह्नों का उपयोग करते हैं तो वे होंगे। उदाहरण के लिए:

create table bad_design("goodLuckSelectingThisColumn" number); 
-1

डेटाबेस में लॉगिन करने के लिए उपयोग किए गए उपयोगकर्ता नाम प्रमाण पत्र की जांच करें। (persistence.xml ??)। समस्या ज्यादातर है, डेटाबेस में लॉगिन करने के लिए उपयोग किया जाने वाला उपयोगकर्ता नाम \ पासवर्ड, ऑब्जेक्ट में दृश्यता नहीं है (इस मामले में table_name)। (अपने डेटा स्रोत में उपलब्ध उपयोगकर्ता नाम \ पासवर्ड का उपयोग करके, एसक्यूएल डेवलपर में लॉग इन करने का प्रयास करें)

+0

क्या वह तालिका नहीं देगी? एसक्यूएल> अवैध_table_name से कोला का चयन करें; अमान्य_टेबल_नाम * लाइन पर एआरआरओआर 1: ओआरए -00 9 42: तालिका या दृश्य मौजूद नहीं है –

+0

कोई persistence.xml नहीं है। हाइबरनेट वेबस्फेयर – Victor

+0

पर परिभाषित डेटासोर्स का उपयोग कर रहा है, मैं यह नहीं कह रहा हूं कि तालिका वस्तु मौजूद नहीं है। मैं कह रहा हूं कि एक दृश्यता समस्या है। क्या उसने यह नहीं कहा कि वह sqldeveloper में लॉग इन हुआ और सबकुछ ठीक से पाया ... केवल एक चीज, मैं सोच सकता था, उपयोगकर्ता नाम में एक अंतर है। (स्कीमा) –

1

क्या आपने प्रोड और देव में तालिका परिभाषाओं की तुलना की है?

और जब आप इसे SQL डेवलपर में चला रहे हैं, तो क्या आप प्रोड (एप्लिकेशन के समान डेटाबेस) में क्वेरी चला रहे हैं और उसी उपयोगकर्ता के साथ?

यदि कुछ अतिरिक्त कॉलम जो आप जोड़ रहे हैं (एक कमांड कमांड का उपयोग कर रहे हैं) और इन परिवर्तनों को अभी तक प्रोड में प्रचारित नहीं किया गया है, तो यह समस्या संभव है।

क्या आप तालिका और आपकी वास्तविक क्वेरी की परिभाषा पोस्ट कर सकते हैं?

6

ओरेकल ORA-00904 फेंक देगा यदि उपयोगकर्ता निष्पादित करने में क्वेरी में शामिल वस्तुओं पर उचित अनुमति नहीं है।

0

मैं ओरेकल के लिए टॉड का उपयोग करें और यदि तालिका एक आप के रूप में प्रवेश से एक अन्य उपयोगकर्ता नाम के स्वामित्व में है और आप तालिका को पढ़ने के लिए उपयोग किया है, तो आप अभी भी मूल तालिका स्वामी जोड़ने के लिए आवश्यकता हो सकती है टेबल नाम के लिए।

उदाहरण के लिए, मान लें कि तालिका के मालिक का नाम 'OWNER1' है और आप 'USER1' के रूप में लॉग इन हैं।

select * from table_name where x='test'; 

त्रुटि सफाया तालिका मालिक के साथ TABLE_NAME लगाकर और देता है परिणाम:: इस क्वेरी आप एक ORA-00904 त्रुटि दे सकता है

select * from 
2

के रूप में स्तंभ नाम लिखें दोहरे उद्धरण के बीच " आम नाम"।

यदि त्रुटि संदेश आपके द्वारा लिखे गए अनुसार एक अलग वर्ण केस दिखाता है, तो यह संभावना है कि आपके एसक्यूएल क्लाइंट ने आपके लिए स्वचालित केस रूपांतरण किया हो। इसे बाईपास करने के लिए डबल कोट का उपयोग करें। (यह Squirrell क्लाइंट 3.0 पर काम करता है)।

3

यह तब हुआ जब मैंने गलती से एक ही लगातार डेटाबेस तालिका के साथ दो इकाइयों को परिभाषित किया। तालिकाओं में से एक में सवाल में स्तंभ मौजूद था, दूसरे में नहीं। किसी ऑब्जेक्ट को जारी रखने का प्रयास करते समय (गलत अंतर्निहित डेटाबेस तालिका का जिक्र करते हुए प्रकार), यह त्रुटि हुई।

+0

वाह! यह उत्तर वास्तव में मुझे धन्यवाद –

1

फ़ील्ड के लिए जावा क्लास में कॉलम एनोटेशन की स्थिति की जांच करें उदाहरण के लिए, 3 कॉलम (नाम, रोल_नो, मार्क्स) के साथ नाम छात्र के साथ एक तालिका पर विचार करें।

फिर सुनिश्चित करें कि आपने सेटर विधि के बजाय गेटर विधि से पहले कॉलम की एनोटेशन नीचे दी गई है। यह उर समस्या @Column का समाधान होगा (नाम = "नाम", लंबाई = 100)

**@Column(name = "NAME", length = 100) 
public String getName() {** 
    return name; 
} 

    public void setName(String name) { 
    this.name= name; 
} 
2

यह डीबीएस स्तंभ के साथ "बनाया गया था जो कि इसके नाम केस-संवेदी बनाता है की वजह से एक है।

ओरेकल तालिका स्तंभ नाम: GoodRec हाइव केस संवेदनशीलता को पहचान नहीं कर सकते हैं: त्रुटि फेंक दिया गया था - की वजह से: java.sql.SQLSyntaxErrorException: ORA-00904: "GOODREC": अमान्य पहचानकर्ता

समाधान: नाम बदलें ओरेकल स्तंभ नाम सभी टोपी के लिए रों।

संबंधित मुद्दे