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

Oracle संग्रहीत कार्यविधि में वर्ण स्ट्रिंग बफ़र बहुत छोटी त्रुटि

टिप्पणियों में उल्लिखित परिदृश्य का सरल डेमो:

create or replace procedure p42(out_message out varchar2) as
begin
  out_message := 'Test message';
end p42;
/

अगर मैं इसे एक वेरिएबल के साथ कॉल करता हूं जिसे काफी बड़ा घोषित किया गया है, तो यह ठीक है। मेरे पास 12-चार चर है, इसलिए 12-चार मान निर्दिष्ट करना कोई समस्या नहीं है:

declare
  msg varchar2(12);
begin
  p42(msg);
end;
/

anonymous block completed

लेकिन अगर मैं कोई गलती करता हूं और कॉलर के चर को बहुत छोटा कर देता हूं तो मुझे वह त्रुटि मिलती है जो आप देख रहे हैं:

declare
  msg varchar2(10);
begin
  p42(msg);
end;
/

Error report:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at "STACKOVERFLOW.P42", line 3
ORA-06512: at line 4
06502. 00000 -  "PL/SQL: numeric or value error%s"
*Cause:    
*Action:

त्रुटि स्टैक उस प्रक्रिया में दोनों पंक्तियों को दिखाता है जो त्रुटिपूर्ण (पंक्ति 3), और कॉलर में रेखा जिसने इसे ट्रिगर किया (पंक्ति 4)। आप इसे कहां कॉल कर रहे हैं, इस पर निर्भर करते हुए, निश्चित रूप से आपके पास पूरा स्टैक नहीं हो सकता है।

आपने उल्लेख किया कि भविष्य में विभिन्न त्रुटि संदेश होंगे। आपको यह सुनिश्चित करने की ज़रूरत है कि जो कुछ भी इसे कॉल करता है वह चर को आपके किसी भी संदेश से निपटने के लिए पर्याप्त रूप से परिभाषित करता है। यदि उन्हें किसी तालिका में संग्रहीत किया गया था, तो आप उसे अर्ध-स्वचालित कर सकते हैं, अन्यथा यह एक मैन्युअल कोड समीक्षा जांच होगी।

ठीक है, इसे पोस्ट करने के बाद आपकी सी # टिप्पणी देखी। ऐसा लगता है कि आप इस कंस्ट्रक्टर को कॉल कर रहे हैं; यह यह नहीं बताता कि इसे कौन सा डिफ़ॉल्ट आकार मिलता है, लेकिन यह सोचना अनुचित नहीं है कि यह 1 हो सकता है। इसलिए आपको यह कंस्ट्रक्टर इसके बजाय स्पष्ट रूप से आकार निर्दिष्ट करने के लिए:

... कुछ इस तरह:

OracleParameter prm15 = new OracleParameter("out_str_message",
    OracleDbType.Varchar2, 80);

जब तक निर्माण के बाद आकार को रीसेट करने का कोई तरीका न हो, जिसे मैं नहीं देख सकता। (ऐसा कुछ नहीं जो मैंने कभी इस्तेमाल किया हो!)।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle DB तालिका या दृश्य मौजूद नहीं है

  2. ओरेकल पीएल/एसक्यूएल - संग्रहीत प्रक्रिया प्रदर्शन के लिए NO_DATA_FOUND अपवाद खराब हैं?

  3. किसी दी गई तारीख से महीने का आखिरी दिन कैसे प्राप्त करें?

  4. SQL- TIMEZONE के साथ TIMESTAMP, DATE और TIMESTAMP के बीच अंतर?

  5. पृष्ठ आइटम को अद्यतन करने वाली गतिशील क्रियाओं के लिए Oracle APEX 18.1.0.00.45 पर सत्र स्थिति सुरक्षा अक्षम नहीं कर सकता