substr function failure

Hi, can someone tell me why a simple substr would throw an error if the varchar target assignment is not larger than the length supplied in the substr function three characters?

can someone tell me why:

declare
v_legal varchar2 (200);
v_disp_trans_sid integer: = 850500;

Start

v_legal: = SUBSTR (Ttls_Common.build_parcel_string (v_disp_trans_sid), 1, 200);
dbms_output.put_line ('v_legal is' |) Length (v_legal) | 'characters.');

end;
/

This causes even if the assignment is substr to 200:

declare
*
ERROR on line 1:
ORA-06502: PL/SQL: digital or value error: character string buffer too small
ORA-06512: at line 7

Yet once I increase the size of the target varchar by three characters it works:

declare
v_legal varchar2 (203);
v_disp_trans_sid integer: = 850500;

Start

v_legal: = SUBSTR (Ttls_Common.build_parcel_string (v_disp_trans_sid), 1, 200);
dbms_output.put_line ('v_legal is' |) Length (v_legal) | 'characters.');

end;
/

causes:

v_legal is 200 characters.

PL/SQL procedure successfully completed.

user521233 wrote:
my character set:

Yes, UTF8 is multibyte. Search NLS_LENGTH_SEMANTICS now:

Select the value from nls_session_parameters where parameter = "NLS_LENGTH_SEMANTICS."

Most likely it is the BYTE value. If so, as I already mentioned, you can specify explicitly:

v_legal varchar2 (200 char);

or you can define the semantics of length for your session of characters instead of bytes

ALTER SESSION SET NLS_LENGTH_SEMANTICS = CHAR;

or you can assign this TANK once for the instance:

ALTER SYSTEM SET NLS_LENGTH_SEMANTICS = CHAR;

and bounce th instance.

SY.

Tags: Database

Similar Questions

  • Equivalent OBIEE TO_DATE and SUBSTR functions

    I have the formula for the next column, which works correctly:

    SUM (CASE WHEN (TimeStampDiff (SQL_TSI_month, "Registration - College". "" Effective colleges F. ((("' Program Start Date ', current_date)) / 12 < 6 THEN 1 ELSE 0 END)


    I want to replace the current_date with scope of practice. Because the scope of practice is currently not in a date format (e.g. 201213, 201314, 201415), I need to use the TO_DATE and SUBSTR functions OBIEE equivalent to convert this field into a format that can be used by the TimeStampDiff function.

    The current (outside OBIEE) SQL for the conversion of the year at a date looks like this:

    To_date (substr (Fiscal_Year, 1, 4) |) '09', "YYYYMM")


    I tried to replace current_date in the column formula above by the following, but it didn't work:

    To this day (Substring ("registration - College". "D time". " "Exercise" FROM 1 to 4) | '09', "YYYYMM")

    TO_DATETIME (LEFT ("registration - College". "D time". " ("' Exercise ', 4) | ("/ 09/01 ', ' yyyy/mm/dd')

    Good course assuming that "registration - College". "D time". " "' Exercise ' is of type varchar, otherwise you will first need to cast as varchar or LEFT won't like it (but the error will tell you what the problem is exactly).

  • WE SHOULD NOT USE SUBSTR FUNCTION...

    Hello

    ex: [email protected] , [email protected] [email protected]

    AS THIS HUNDRED PLATE IS HERE.

    QUERY:

    I DON'T WANT THAT YAHOO, GMAIL LIKE THAT... WE SHOULD NOT USE SUBSTR FUNCTION...

    THIS IS AN INTERVIEW QUESTION

    Thank you

    Try:

    Select regexp_replace (' [email protected]',' ^. * @(.*)-.) (. *)', '\1') twice;

  • How do we use the SUBSTR function in OWB

    Hello, I'm pretty new to OWB. I need to use the SUBSTR function in owb. My source table has 16 characters in length. But in my datamar,.
    the length is 14 years. I want to the substring from source to the destination. The mappings are already developed. I need to change the mapping to make sure that,
    It brings only SUBSTR (1.14) mini - DW.

    Any help is appreciated.

    Use the operator of expression between two attributes.

    OWB has already SUBSTR as a preset transformation

    Take a look at the doc below
    26.3.1 open the expression builder

    http://docs.Oracle.com/CD/E11882_01/OWB.112/e10935.PDF

  • How to use the Substring function with Case statement.

    Hi all

    I have a requirement where I have to use the substring function on the ground for the report criteria.
    FOR EXAMPLE
    I branch domain name where I have all the information of the branch names, now some of the branch names are too large with an extension after the name.
    now I want substing it, but the length of characters varies for each branch.
    so is it possible where we use a box where we can define if the character of name plug exceed a value then he substing with this length.

    Try something like this:

    LENGTH WHEN CARTER (tablename. Branch_Name) > n THEN SUBSTRING (...) Of ANOTHER tablename. Branch_Name END

    where n is the number of characters that you want to start the break.

  • SUBSTRING function

    I don't find a substring function in ColdFusion 6.1.

    I want to have some functions such as:

    substring(string [, start ] [, length])

    Take a look at functions by category. The string functions, below MID. This is the version of ColdFusion to substring.

    http://www.Adobe.com/LiveDocs/ColdFusion/6.1/htmldocs/functi17.htm

  • To specify the SUBSTR function in SqlLdr

    Hello
    I want to clarify the SUBSTR function for that column when I use sqlldr in owb; but I didn't know where I can find this property set. everyone knows?

    Thank you
    Prabha

    Hi Prahba

    .. . If you build the map with the file as the source, add an expression that has the SUBSTR and map this output of the expression attribute to your target, the control generated for the mapping file will have the expression.

    See you soon
    David

  • Substr function

    I am trying to extract only the part number in the string
    for example

    EN-0345
    L456
    PI678

    The data could be dispalyed as

    0345
    456
    678


    tried using substr, regexp etc.

    Any help will be appreciated

    Published by: Smidreb on April 12, 2012 10:58

    Hello

    Smidreb wrote:
    I am trying to extract only the part number in the string
    for example

    EN-0345
    L456
    PI678

    The data could be dispalyed as

    0345
    456
    678

    tried using substr, regexp etc.

    REGEXP_SUBSTR can do.

    SELECT  REGEXP_SUBSTR (str, '[[:digit:]]+')    AS number_part
    FROM    table_x
    ;
    

    If str does contain not just what numbers, the function returns NULL.

    I hope that answers your question.
    If not, post a small example data (CREATE TABLE and only relevant columns, INSERT statements) for all of the tables involved and also publish outcomes from these data.
    Explain, using specific examples, how you get these results from these data.
    Always tell what version of Oracle you are using.

  • @SUBSTRING function problem

    Hello

    I try to put a formula on a member in Hyperion Planning:

    *@Member (@Substring (@Name (@CURRMBR (Measures)), 0, 5))-> @MEMBER (@SUBSTRING (@NAME (@CURRMBR (Measures)), 7)); *

    For example, on the "205000_DIM" Member, this formula should return that data on "205000"-> "DIM".

    But I have an error message in Essbase: runtime error formula for [205000_DIM] + (line 1): attempt to cross a member null in function [@X] +.

    When I put "205000'-> @MEMBER (@SUBSTRING (@NAME (@CURRMBR (Measures)), 7)); = > it works!

    I don't understand...

    Help, please!

    Thank you very much.

    Virgil.

    "205000" are 6 numbers - not 5 - perhaps SUBSTR (...,0,6) works?

  • @SUBSTRING function - use with if

    Hello people,

    I appreciate too that can help me.

    My problem: I have a lot of members on the dimension of accounts using numbers as the name. For example, Member "3100200", "3200100" and so on. I have to check with @SUBTRING using the IF function if the string account starts with "31" or "32". Follow below my test at Sample.Basic (standard Essbase database example) script, I check all the descendants of the measures dimension and if the current Member begins with SA, the number one is applied to cross.

    DIFFICULTY (' real ',' New York","100-10",@IDESCENDANTS ("Measures")")
    "Oct."
    (IF (@SUBSTRING (@NAME (@CURRMBR ("Measures")), 0, 1) == "a"))
    1;
    ENDIF);
    ENDFIX

    Follow the error | Caution:

    WARNING: 1200354 compilation error formula for [Oct] (line 4): type [NUMBER] is [STRING] ([@SUBSTRING]) expected in function [operator @EQ]

    ===============================================================

    Second test using only an equal.

    DIFFICULTY (' real ',' New York","100-10",@IDESCENDANTS ("Measures")")
    "Oct."
    (IF (@SUBSTRING (@NAME (@CURRMBR ("Measures")), 0, 1) = "sa")
    1;
    ENDIF);
    ENDFIX

    Follow the error | Caution:

    WARNING: 1200336 parse error formula for [Oct] (line 4): [()] without [)]

    ====================================================

    After many tests I've done, I could realize Essbase cannot 'understand' equal to compare the content of strings.

    Could someone help me with this problem?

    A big thank you and best regards,
    Wallace Galvão
    Brazil - Oracle

    I have not actually tried this, but what about something like:

    Oct)
    IF (@ISMBR (@MATCH (measures, "his"))
    1;
    ENDIF;

  • How to use the rpad, lpad or substr function in the out put files in oracle plsql?

    Hi all

    Declare
       v_account varchar2(30) := '01-000-000-0000-000-0000 ';
       v_WIP varchar2(30) := '123435';
       v_code varchar2(30) := 'PURCHASE_PRICE_VARIANCE';
       v_dr number:=248.8;
       v_cr number:=248.8;
    Begin
     dbms_output.put_line('        Account Segments          '||'   '||' WIP Entity Name      '||'   '||'       Accounting class code          '||'  '||' Accounted DR '||'  '||' Accounted CR ');
     dbms_output.put_line('----------------------------------'||'   '||'----------------------'||'   '||'--------------------------------------'||'  '||'-------------------'||'  '||'------------------- ');
     dbms_output.put_line(rpad(v_account,30)||rpad(v_WIP,25)||rpad( v_code,34)||' '||rpad(v_dr,20)||rpad(v_cr,20));
    End;
    

    Out to

           Account Segments                  WIP Entity Name             Accounting class code               Accounted DR          Accounted CR 
    ----------------------------------   ----------------------   --------------------------------------  -------------------  ------------------- 
    01-000-000-0000-000-0000                  123435                   PURCHASE_PRICE_VARIANCE               248.8                    248.8               
    

    But if I v_code value is "ABCDGE" then

            Account Segments                  WIP Entity Name             Accounting class code                 Accounted DR      Accounted CR 
    ----------------------------------   ----------------------   --------------------------------------  -------------------  ------------------- 
    01-000-000-0000-000-0000                     123435            ABCDGE                             248.8               248.8               
    

    can you please help me how to solve this type of questions?

    Oracle Database 11 g Enterprise Edition Release 11.1.0.7.0 - 64 bit Production

    Thank you

    Rajesh123,


    If you do not have it still works, you can use the code below.

    This is based on the details below, you have given

    Account Segments--> left-aligned--> to 26 characters

    Entity name WIP--> Center--> 18 characters length

    Accounting--> left-aligned class--> character length 28 code

    NTS DR--> Center--> 15 character length

    NTS-> Center CR--> 15 character length

    I used the function line given by Karthick_Arp.

    Add the function below to your package:

    function align(p_str in varchar2, p_justify varchar2, p_size integer)
      return varchar2
      is
        l_str    varchar2(4000);
        l_temp   number;
        l_temp_1 number;
        l_left   number;
        l_right  number;
      begin
        case p_justify
          when 'RIGHT' then
            l_str := lpad(p_str, p_size);
          when 'LEFT' then
            l_str := rpad(p_str, p_size);
          when 'CENTER' then
            l_temp   := p_size - length(p_str);
            l_temp_1 := l_temp/2;
            l_left   := floor(l_temp_1);
            l_right  := ceil (l_temp_1);  
    
            l_str := lpad(' ', l_left) || p_str || rpad(' ', l_right);
          else
            raise_application_error(-20001, 'Invalid parameter for p_justify specified -- ' || p_justify);
        end case;  
    
        return l_str;
    end;
    

    Then copy the Sub lines to your code.

     fnd_file.put_line(fnd_file.output,align('Account Segments','CENTER',26)||'   '||align('WIP Entity Name','CENTER',18)||'   '||align('Accounting class code','CENTER',28)||'   '||align('Accounted DR','CENTER',15)||'   '||align('Accounted CR','CENTER',15));
     fnd_file.put_line(fnd_file.output,'--------------------------'||'   '||'------------------'||'   '||'----------------------------'||'   '||'---------------'||'   '||'---------------');
     fnd_file.put_line(fnd_file.output,align(nvl(v_account,' '),'LEFT',26)||'   '||align(v_WIP,'CENTER',18)||'   '||align(v_code,'LEFT',28)||'   '||align(v_dr,'CENTER',15)||'   '||align(v_cr,'CENTER',15));
    

    Once the above code 2 is added to your code, please compile the package and run the concurrent program. Check your output.

    See you soon

    AJ

  • SUBSTRING function in 11.1.5

    Hello

    Pls. can you me how use Substring('string',1,2) it will return 'st' in OBI?

    Kind regards!

    SUBSTRING ('STRING' 0 TO 3)

    brand, if it is correct

  • Using the SUBSTR function

    Hello

    I have a query like this:

    ------------------------------------------------------------------------------------------------------------------------
    SELECT decode ((select count (1) in the patient_history b where (b.studyid = a.studyid and b.baseline_no = a.baseline_no and b.aeseq = a.aeseq and release_date IS not NULL)), 0, 'new ', ' courses') status, a.*
    OF patient_history one
    ..........
    ---------------------------------------------------------------------------------------

    In this request for where clause ("b.studyid = a.studyid and b.baseline_no = a.baseline_no and b.aeseq = a.aeseq")

    All columns listed here in where clause had to come from a few tab100 of the table that contains a column named "pass".

    tab100
    -----------
    Col

    The columns of this pass store column names that are used in the comparison of clause 'where '. (this is a self-join)

    "Say this column, ' STUDYID, BASLINE_NO, QBSCA ' as value so how can I write a string to be able to select these values such as ' a ' or 'b', etc. and write the query completely.

    Select decode ((select count (1) in the patient_history |)) 'b' || ' OÙ (' || "dynamic string after extraction of the neck | ... etc.

    I tried to use subtsr, but did not. Help, please.

    Rgds,
    Aashish

    You can use this function as as follows

    declare
      l_cur sys_refcursor;
      cursor l_cur_int  is
        SELECT 'Current' status, a.* FROM patient_history a where 1 = 2; -- it's a fake cursor just to define output columns
      l_rec l_cur_int%rowtype;
    begin
      open l_cur for 'select ....  where '||get_where;
      loop
       fetch l_cur into l_rec;
       exit when l_cur%notfound;
       ... processing here...
      end loop;
    end;
    
  • I created a password check function failure

    I created a function to check the complexity of passwords in sys, but if I apply this to all oracle (profile) accounts, my users can't sign any application apex.

    I get:

    ORA-28003: password for the specified password verification failed ORA-20001: password same or similar user ORA-06512: at "APEX_030200.WWV_FLOW_SECURITY", line 248 ORA-06512: in the 'SYS '. WWV_FLOW_VAL', line 55 ORA-06521: PL/SQL: mapping of error function
    ERR-10480 error cannot perform the function of verification of the authentication credentials.

    Patrick,

    What is your version of the database? If it predates 10.2.0.3, you will not be able to use the profile feature in conjunction with the database authentication account in the apex.

    Scott

  • Error when you use the substring function

    Hello
    I get the error while using this query below.

    Substr ("end". ASSET_NUM, instr (end of the day". ASSET_NUM, ' :') + 1).

    ([nQSError: 10058]) A general error occurred. [nQSError: 27002] Near <>(): syntax error [nQSError: 26012]. (HY000)

    Please help me...

    Published by: user10441472 on June 24, 2009 12:49

    Hello

    Try this

    Substring ('end of account'. ASSET_NUM (Evaluate (as an int, 'End', ' instr(%1,%2)'. ASSET_NUM,': ')) + 1, 50)

Maybe you are looking for