2012-07-01 12 views
6

पीएल/एसक्यूएल में, नीचे दिया गया कोड असफल हो जाएगा। यह varchar2 पैरामीटर के आकार की परिभाषा की अनुमति नहीं देता है। तुम जानते हो क्यों? मैं इसे कैसे ठीक करूं? "(":पीएल/एसक्यूएल फ़ंक्शन पैरामीटर

: जब निम्न में से एक उम्मीद। =) प्रतीक का सामना किया:

create or replace function logMessage(msg varchar2(2000)) 
return number as 
begin 
    null;  
    return 1; 
end logMessage; 
/

त्रुटि संदेश

1/33 PLS-00,103 है, @% डिफ़ॉल्ट वर्ण प्रतीक ": =" के लिए प्रतिस्थापित किया गया था "(" जारी रखने के लिए

उत्तर

9

आप आकार बाधा को हटाने के द्वारा इसे ठीक कर यह ne नहीं है।। संपादित:

create or replace function logMessage (msg in varchar2) 
return number is 
begin 
    null;  
    return 1; 
end logMessage; 
/

मुझे लगता है कि आपका कार्य इससे थोड़ा अधिक जटिल है?

create function बयान from the documentation के लिए पूरा वाक्य रचना है:

CREATE [OR REPLACE] FUNCTION [Owner.]FunctionName 
    [(arguments [IN|OUT|IN OUT][NOCOPY] DataType [DEFAULT expr][,...])] 
    RETURN DataType [InvokerRightsClause] [DETERMINISTIC] 
    {IS|AS} 

वहाँ the specifics आसपास जानकारी का एक बहुत अगर आप रुचि रखते हैं, लेकिन आप TECH on the Net अधिक उपयोगी मिल सकता है।


के अपने पहले सवाल का जवाब में क्यों मैं नहीं जानता और एक जवाब नहीं मिल रहा। लेकिन to quote APC:

यह कष्टप्रद है, लेकिन इसे जिस तरह से PL/SQL इतना काम करता है हम के साथ जीना है है।

बस रखो, तुम रन-टाइम कितनी देर तक कुछ होने और सक्षम हो, इसलिए, यह से निपटने के लिए जा रहा है पर पता होना चाहिए। वहाँ कुछ ही विकल्प आप हालांकि पर विचार कर सकते हैं:

आप जानते हैं कि लंबाई क्या आप एक चर परिभाषित कर सकते हैं होने के लिए संदेश चाहते हैं, डिफ़ॉल्ट मान के पैरामीटर के substr है:

create or replace function logmessage (msg in varchar2) return number is 

    l_msg varchar2(2000) := substr(msg,1,2000); 

begin 
    return 1; 
end; 

वैकल्पिक रूप से , आप समारोह अपने आप में लंबाई की जांच कर सकते हैं:

create or replace function logmessage (msg in varchar2) return number is 

begin 

    if length(msg) > 2000 then 
     return 0; 
    end if; 

    return 1; 
end; 
3

पैरामीटर डेटा प्रकार के साथ लेकिन बिना डेटा प्रकार लंबाई या परिशुद्धता घोषित कर रहे हैं। इसका मतलब है कि पैरामीटर को VARCHAR2 के रूप में घोषित किया जा सकता है लेकिन इसे लंबाई घटक के साथ घोषित नहीं किया जाएगा (VARCHAR2 (30) मान्य नहीं होगा)।

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