SQL Help: convert values in two rows in a line

Hello

I am using Oracle 11.2, I want to get the values in different rows in the Tb_a table and insert them into the TB_b table as suite:

create a Tb_a (number (5) id, init_dt date, upd_dt date, addr varchar2 (32));
create a Tb_b (number (5) id, date upd_dt, addr varchar2 (32), dated hist_dt);

insert into Tb_a values (101, to_date('ddmmyyyy','21/08/1990'), to_date('ddmmyyyy','22/08/1990'), "address1");
insert into Tb_a values (101, to_date ('ddmmyyyy', 21 August 1991 '), to_date ('ddmmyyyy', 22 August 1991 '), "address2");
insert into Tb_a values (101, to_date('ddmmyyyy','21/08/1992'), to_date('ddmmyyyy','22/08/1992'), "address3");
insert into Tb_a values (102, to_date('ddmmyyyy','24/08/1990'), to_date('ddmmyyyy','25/08/1990'), 'address_address');

I would like to have data in TB_b as follows.
101, 22 August 1990 ","address1", August 21, 1991"
101, August 22, 1991 ","address2", August 21, 1992 '"
101, August 22, 1992 ', 'address3', null
102, 25 August 1990 ', 'address_address', null

Suggest on the SQL to perform the conversion of Tb_a to Tb_b?

Thank you

939569 wrote:
I wish that each line of TB_b has the same value to the ID of the column, upd_dt and addr as Tb_a and the next value in the crt_dt of the Tb_a column.

Or table has a column called crt_dt. Do you mean init_dt?

This rule applies to the same ID only. How can I use LEAD on different ID, not the whole picture?

Inlcude

PARTITION BY id

in the analytical clause, like this:

INSERT INTO  tb_b ( id
                        , upd_dt
            , addr
            , hist_dt
            )
SELECT  id
,     init_dt
,     addr
,     LEAD (init_dt) OVER ( PARTITION BY  id
                                 ORDER BY         init_dt
                   )
FROM    tb_a;

Tags: Database

Similar Questions

  • Mr President, how can I enter two rows at the same time with different default values that only the first line to use see?

    Mr President.

    My worm jdev is 12.2.1

    How to enter two rows at the same time with different default values that only the first line to use see?

    Suppose I have a table with four fields as below

    "DEBIT" VARCHAR2(7) , 
      "DRNAME" VARCHAR2(50),
      "CREDIT" VARCHAR2(7) , 
      "CRNAME" VARCHAR2(50),
    

    Now I want that when I click on a button (create an insert) to create the first line with the default values below

    firstrow.png

    So if I click on the button and then validate the second row with different values is also inserted on commit.

    The value of the second row are like the picture below

    tworows.png

    But the second row should be invisible. It could be achieved by adding vc in the vo.

    The difficult part in my question is therefore, to add the second row with the new default values.

    Because I already added default values in the first row.

    Now how to add second time default values.

    Concerning

    Mr President

    I change the code given by expensive Sameh Nassar and get my results.

    Thanks once again dear Sameh Nassar .

    My code to get my goal is

    First line of code is

        protected void doDML(int operation, TransactionEvent e) {    
    
            if(operation != DML_DELETE)
                 {
                     setAmount(getPurqty().multiply(getUnitpurprice()));
                 } 
    
            if (operation == DML_INSERT )
                       {
                               System.out.println("I am in Insert with vid= " + getVid());
                           insertSecondRowInDatabase(getVid(),getLineitem(),"6010010","SALES TAX PAYABLE",
                            (getPurqty().multiply(getUnitpurprice()).multiply(getStaxrate())).divide(100));      
    
                           }
    
            if(operation == DML_UPDATE)
                              {                                                    
    
                                 System.out.println("I am in Update with vid= " + getVid());
                             updateSecondRowInDatabase(getVid(),
                                 (getPurqty().multiply(getUnitpurprice()).multiply(getStaxrate())).divide(100));      
    
                              }                      
    
            super.doDML(operation, e);
        }
        private void insertSecondRowInDatabase(Object value1, Object value2, Object value3, Object value4, Object value5)
                  {
                    PreparedStatement stat = null;
                    try
                    {
                      String sql = "Insert into vdet (VID,LINEITEM,DEBIT,DRNAME,AMOUNT) values " +
                 "('" + value1 + "','" + value2 + "','" + value3 + "','" + value4 + "','" + value5 + "')";  
    
                      stat = getDBTransaction().createPreparedStatement(sql, 1);
                      stat.executeUpdate();
                    }
                    catch (Exception e)
                    {
                      e.printStackTrace();
                    }
                    finally
                    {
                      try
                      {
                        stat.close();
                      }
                      catch (Exception e)
                      {
                        e.printStackTrace();
                      }
                    }
                  }  
    
                  private void updateSecondRowInDatabase(Object value1, Object value5)
                  {
                    PreparedStatement stat = null;
                    try
                    {
                      String sql = "update vdet set  AMOUNT='"+ value5+"' where VID='" + value1 + "'";                     
    
                      stat = getDBTransaction().createPreparedStatement(sql, 1);  
    
                      stat.executeUpdate();
                    }
                    catch (Exception e)
                    {
                      e.printStackTrace();
                    }
                    finally
                    {
                      try
                      {
                        stat.close();
                      }
                      catch (Exception e)
                      {
                        e.printStackTrace();
                      }
                    }                  
    
                  }
    

    Second line code is inside a bean method

        public void addNewPurchaseVoucher(ActionEvent actionEvent) {
            // Add event code here...
    
            BindingContainer bindings = BindingContext.getCurrent().getCurrentBindingsEntry();
                   DCIteratorBinding dciter = (DCIteratorBinding) bindings.get("VoucherView1Iterator");
                   RowSetIterator rsi = dciter.getRowSetIterator();
                   Row lastRow = rsi.last();
                   int lastRowIndex = rsi.getRangeIndexOf(lastRow);
                   Row newRow = rsi.createRow();
                   newRow.setNewRowState(Row.STATUS_NEW);
                   rsi.insertRowAtRangeIndex(lastRowIndex +1, newRow);
                   rsi.setCurrentRow(newRow);
    
                   BindingContainer bindings1 = BindingContext.getCurrent().getCurrentBindingsEntry();
                   DCIteratorBinding dciter1 = (DCIteratorBinding) bindings1.get("VdetView1Iterator");
                   RowSetIterator rsi1 = dciter1.getRowSetIterator();
                   Row lastRow1 = rsi1.last();
                   int lastRowIndex1 = rsi1.getRangeIndexOf(lastRow1);
                   Row newRow1 = rsi1.createRow();
                   newRow1.setNewRowState(Row.STATUS_NEW);
                   rsi1.insertRowAtRangeIndex(lastRowIndex1 +1, newRow1);
                   rsi1.setCurrentRow(newRow1);
        }
    

    And final saveUpdate method is

        public void saveUpdateButton(ActionEvent actionEvent) {
            // Add event code here...
    
            BindingContainer bindingsBC = BindingContext.getCurrent().getCurrentBindingsEntry();      
    
                   OperationBinding commit = bindingsBC.getOperationBinding("Commit");
                   commit.execute(); 
    
            OperationBinding operationBinding = BindingContext.getCurrent().getCurrentBindingsEntry().getOperationBinding("Commit");
            operationBinding.execute();
            DCIteratorBinding iter = (DCIteratorBinding) BindingContext.getCurrent().getCurrentBindingsEntry().get("VdetView1Iterator");// write iterator name from pageDef.
            iter.getViewObject().executeQuery();  
    
        }
    

    Thanks for all the cooperation to obtain the desired results.

    Concerning

  • Remove ' / ' with a value of feld to create two rows

    I have a table with a structure like

    CREATE TABLE TEST
    (
    MOLDCODE VARCHAR2 (20 BYTE) NOT NULL ACTIVATE.
    PRODCODE VARCHAR2 (255 BYTE),
    DIAMCONTAINER NUMBER (4.1).
    SEGMENT NUMBER (2.0)
    )

    And it contains data such as

    MOLDCODE PRODCODE DIAMCONTAINER SEGMENT

    ADE16920-1 CJ02A/SD51A 96 10
    ADE20206 CT25A 95 8
    ADE16912-1 DG31A 57 10
    ADE16913 AS30A/DE28A 96 10
    ADE17845 CJ24A/SD36A 96 10


    I want to create another table saw which will remove / of prodcode and he will separate the values and forms two rows with the same values for the other fields.
    for example.

    Source: -.
    MOLDCODE PRODCODE DIAMCONTAINER SEGMENT

    ADE16920-1 CJ02A/SD51A 96 10
    ADE16913 AS30A/DE28A 96 10

    Purpose: -.
    MOLDCODE PRODCODE DIAMCONTAINER SEGMENT

    ADE16920-1 96 10 CJ02A
    ADE16920-1 96 10 SD51A
    ADE16913 AS30A 96 10
    ADE16913 DE28A 96 10

    Is it possible?
    Need help for the same thing.

    Check this box:

        SELECT moldcode,
               REGEXP_SUBSTR (procode,
                              '[^/]+',
                              1,
                              LEVEL)
                  procode,
               diamcontainer,
               segment
          FROM t
    CONNECT BY     LEVEL <= REGEXP_COUNT (procode, '/') + 1
               AND moldcode = PRIOR moldcode
               AND PRIOR SYS_GUID () IS NOT NULL;
    

    See you soon,.
    Manik.

  • How to get 3table of values in the row of acronym in 11g

    Hi all
    I have 3 tables,
              Tab1
    Ck_no   amt
    1     2000
    
    
              Tab2
    
    Ck_no          Line        amt
      1              1         1000
      1              2         1000
    
    
             Tab3
    
    Ck_no         Line          sub        amt
    1               1            1          500
    1             1            2          500
    1               2            1          100
    1               2            2          200
    1               2            3          700
    In all ck_no tables is common.
    Since the 3 tables above, I need the output in the following format,

    Amt1    amt2      amt3     amt4   amt5     amt6    amt7        amt8     amt 9
    2000    1000    1000      500     500        500     100        200       700
    Can someone help me in this?

    Thank you


    Kind regards
    Gurujothi

    Published by: Gurujothi on July 9, 2012 20:46

    Published by: Gurujothi on July 9, 2012 20:47

    Gurujothi wrote:
    I know how to get the values in a row for a single column,
    ...
    but I get the error,

    Too Many values
    

    How do I change this?

    Please post your data in the example, the expected results of these data and explain the logic so that we can understand how the data relate to each other.

    In your original post, it is not clear how amt4, amt5 abd amt6 therefore show them all 500 when there are only two 500 values in the source data.

    SQL> ed
    Wrote file afiedt.buf
    
      1  with Tab1 as (select 1 as ck_no, 2000 as amt from dual)
      2      ,Tab2 as (select 1 as ck_no, 1 as line, 1000 as amt from dual union all
      3                select 1, 2, 1000 from dual)
      4      ,Tab3 as (select 1 as ck_no, 1 as line, 1 as sub, 500 as amt from dual union all
      5                select 1, 1, 2, 500 from dual union all
      6                select 1, 2, 1, 100 from dual union all
      7                select 1, 2, 2, 200 from dual union all
      8                select 1, 2, 3, 700 from dual)
      9  --
     10  -- END OF TEST DATA
     11  --
     12  select ck_no
     13        ,max(decode(rn,1,amt)) as amt1
     14        ,max(decode(rn,2,amt)) as amt2
     15        ,max(decode(rn,3,amt)) as amt3
     16        ,max(decode(rn,4,amt)) as amt4
     17        ,max(decode(rn,5,amt)) as amt5
     18        ,max(decode(rn,6,amt)) as amt6
     19        ,max(decode(rn,7,amt)) as amt7
     20        ,max(decode(rn,8,amt)) as amt8
     21        ,max(decode(rn,9,amt)) as amt9
     22  from (
     23        select ck_no, amt, row_number() over (partition by ck_no order by ord, line, sub) as rn
     24        from (
     25              select 0 as ord, ck_no, 0 as line, 0 as sub, amt from tab1 union all
     26              select 1 as ord, ck_no, line, 0 as sub, amt from tab2 union all
     27              select 2 as ord, ck_no, line, sub, amt from tab3
     28             )
     29       )
     30* group by ck_no
    SQL> /
    
         CK_NO       AMT1       AMT2       AMT3       AMT4       AMT5       AMT6       AMT7       AMT8    AMT9
    ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
             1       2000       1000       1000        500        500        100        200        700
    
  • Compare two rows in the same table

    Hi all

    I need to compare two rows in the same table, I don't know hoe to do it in pl/sql. Please help me on this.

    example:

    price of ro TR
    xya0001 AMA.7 12
    xya0003 ama6 14
    xya0004 AMA.7 16

    in table b is a unique value for each line, I need to compare the price column and see if the first value is less than or greater than the following value and, if there is more to put the corresponding value of br to a variable, and if it is less, put the corresponding value of the br to another variable. I don't know a method to do this, as I'm new to pl/sql. Please help me in this
    for data in(select tr,br,price, lag(price) over ( order by tr) newcol
    from yourtable)
    loop
    if nvl(data.newcol,0) > data.price then
    variable1:=data.br;
    else
    varable2:=data.br;
    end if;
    end loop;
    
  • Difference between two rows in a table.

    Hi all

    I have a requirement where I need to calculate the difference of a column, but the values are in two rows.

    Its exactly like that, I'll have a table where I have stored incidents with their status and their modification dates

    example:
    Incident_Id: Status: Modified_Date (in seconds from a specific date)
    1: 1: 9080890
    1: 2: 9080999
    1: 3: 9081900
    2: 1: 10000900
    2: 2: 10001000
    2: 3: 10002000

    Now there I show the time spent by each incident in each State.

    That is to say for the State 1 I need the difference between the date of change of condition 2 and updated the date of status 1 Similarly

    2 necessary status the difference between the date of change of condition 3 and updated the status date 2 and so on.

    the real result, I need is like that

    Incident_Id: Status: Timespent
    1: 1: (modified_date (status2) - modified_date (status1))


    Please help me to write the query to do this.

    Kind regards
    Tauceef

    Can we assume that the lines are classified according TO the event status ?
    This (i.e. an Ordering) is necessary in order to systematically identify consecutive lines.

    Please try the analytical function LAG and less to the current value.

  • SQL query returns no row vs. multiple lines

    Hello

    I am trying to get the result of a simple sql query,
    If there is no row returned, he would have "No. ROWS" in the result set.
    Other wise all the rows containing data is necessary.

    Let me know how this could be achieved. Under query works for the latter and not first case as mentioned below

    OUTPUT

    + (box 1) when we use B_ID = 123456 +.

    IDS
    -----
    'NO LINE '.

    + (box 2) when we use B_ID = 12345 +.
    IDS
    -----
    1 11112345
    2 22212345
    create table TEMP_AAA
    (
      A_ID VARCHAR2(10),
      B_ID VARCHAR2(10)
    )
    
    INSERT INTO TEMP_AAA(A_ID,B_ID) VALUES('111','12345');
    INSERT INTO TEMP_AAA(A_ID,B_ID) VALUES('222','12345');
    INSERT INTO TEMP_AAA(A_ID,B_ID) VALUES('333','12000');
    INSERT INTO TEMP_AAA(A_ID,B_ID) VALUES('444','10000');
    WITH 
    MATCH_ROWS AS
    (
           SELECT A_ID||B_ID IDS FROM TEMP_AAA WHERE B_ID=12345
    ),
    
    MATCH_ROW_COUNT AS
    (
           SELECT COUNT(1) AS COUNTS FROM MATCH_ROWS
    ),
    
    PROCESSED_ROWS AS
    (
           SELECT
                 CASE WHEN COUNTS = 0
                      THEN 
                       (SELECT NVL((SELECT IDS FROM TEMP_AAA WHERE B_ID=12345),'NO ROWS') IDS FROM DUAL)
                      ELSE
                       MATCH_ROWS.IDS
                 END IDS     
            FROM MATCH_ROWS,MATCH_ROW_COUNT
    )
    
    SELECT * FROM PROCESSED_ROWS;

    Hello

    I think you want to put this on a report or something. I have what would be easier to do this logic there. But if you want that this is possible.
    Like this

    with
    temp_aaa as
    (select '111' a_id ,'12345' b_id from dual union all
    select '222'      ,'12345'  from dual union all
    select '333'      ,'12000'  from dual union all
    select '444'      ,'10000'  from dual
    )
    , wanted_rows as
    ( select  '123456' B_ID from dual)
    select
      temp_aaa.A_ID || temp_aaa.B_ID IDS 
    
    from
      temp_aaa
      ,wanted_rows
    where
      temp_aaa.b_id = wanted_rows.b_id
    union all
    select
      'NO ROWS'
    FROM
      DUAL
    WHERE
      (SELECT COUNT(*) FROM TEMP_AAA, wanted_rows WHERE TEMP_AAA.B_ID = wanted_rows.B_ID) = 0
    

    In addition, you mix var and number of always use the same type or convert explicitly (to_number or to_char)

    WITH
    MATCH_ROWS AS
    (
           SELECT A_ID||B_ID IDS FROM TEMP_AAA WHERE      B_ID           =12345
    --                                                    varchar2(10)   number
    ),
    ...
    

    And again in the

                      THEN
                       (SELECT NVL((SELECT IDS FROM TEMP_AAA WHERE B_ID           =12345),'NO ROWS') IDS FROM DUAL)
    --                                                             varchar2(10)   number
    

    Kind regards

    Peter

  • How to put the two column values in two different colors unique online: MobApp

    Hello

    I develop Mobile Application.
    I want to show two values in different columns in single row and first column value in either green or red and the second color the default column value.
    the first value of the column is green when the value is greater than the second value of the column.
    and the first column value in red when the value is less than the second value of the column.
    The code I tried is:
    --------------------------------------------------------------------------------------------
    < tr:panelGroupLayout layout = "vertical" styleClass = 'list' >
    < tr:panelList styleClass = "panelist ul > li > a" >


    "" < tr:outputText value = "deliver: % #{row.bindings.OccCurr.inputValue},
    inlineStyle = "background-color: #{rank." OccCurr > line. OccFcst? {'Green': 'Red'}; ">

    "< tr:outputText value =" OccFcst: #{row.bindings.OccFcst.inputValue} % ">"

    < / tr:outputText >
    < / tr:outputText >
    < / tr:panelList >
    < / tr:panelGroupLayout >
    ------------------------------------------------------------------------------------------------

    But the code above does not work.


    Please, someone tell me what I need to do.


    I apreciate your time and your help.

    Sanchez.

    Hi Catherine,

    Exactly, what is not working? Your OccCurr and OccFcst values are printed to the screen? I notice some questions.

    (1) If you want to display two outputText on one line, you can surround them with a panelGroupLayout and set the page layout to horizontal.
    (2) I don't think that you can place an outputText in outputText one another as in the codes that you have provided.
    (3) your EL is inconsistent. What is #{row.bindings.OccCurr.inputValue} or #{line. OccCurr}? If your values are displayed, but the background color does not work, it could be the first.

    
      
        
          
          
        
      
    
    

    Kind regards
    Amélie Chan

  • PL/SQL: digital or value error: string buffer too small characters - LOV?

    Environment:

    APEX 3.1.1.00.09 under AIX 5.3 10.2.0.2 in

    Problem sample on apex.oracle.com:

    Workspace: GALWAY
    ID: GWICKE
    Password: GWICKE

    Application ID: 43172 (BUILDERPL) NOTE: there are three 3 applications with the same name, but this one is currently broken

    I get the dreaded "" ORA-06502: PL/SQL: digital or value error: character string buffer too small "when you try to create a new line."

    To reproduce the error:

    1 run page 3
    2 - Select any agency
    3 - Click on the button "create a new contract.
    4 - Select the start and end dates in the DATE picker
    5 - Click on the button "Add contract".

    If the line is added successfully if please go to Indianapolis and run the app for me since you obviously have the 'touch '! ;-) >

    But seriously folks,

    I've read many threads about this error and for the most part, they seem to point to large LOV. I have three 3 LOV on the page but only a 1 is dynamic and display and back elements are the same, a description in this case. There are 400 lines in the LOV table and the description is defined as VARCHAR2 (75), so we're not talking a huge amount of data.

    To further complicate the issue, this application was working just a couple of days. What changes I've made since a few days, you might ask?

    The only thing that comes to mind is I did go through the definitions of element and change the values of maximum size equal to the size of the columns in the target table, using a value of 22 for the NUMBER of columns.

    Since then I went back and changed at a much greater value than their corresponding column definitions, but nothing helped.

    Another interesting fact is that if an existing contract is selected on the page (Page 3 in my case) by selecting an agency that produces values in the second select list (selection of contract) and then clicking on "change this contract." After you change any value or fill in one of the missing values, click "Apply Changes" and he should have success.

    The new contract page and the page of modification of the contract are the same (Page 2) just with different buttons.

    Thanks a lot for any assistance. Indeed, it is greatly appreciated.

    -gary

    PS I also tried to change the LOV both given a popup and a standard text box I typed in, both received the same message.

    Gary - I deleted then recreated your DML process and it seems to have solved the problem. Export page reveals something odd in the process definition:

    declare  p varchar2(32767) := null;  l_clob clob;  l_length number := 1;beginp:=p||'F|#OWNER#:BUILDERPL_CONTRACT:P2_CONTRACT_SEQ:CONTRACT_SEQ|I';
    
    wwv_flow_api.create_page_process( ...
    

    That the assignment statement must not have ' F | "as the first two characters. There must be a bug in one of the wizards who created the process. Have you used a wizard to create the page?

    Scott

  • How can I move App Tabs down, where are the other bookmark toolbars? Or, how can I put my toolbars on two rows bookmarks and forget the App Tabs?

    I have several bookmarks in my toolbar, and my most often used found in a drop down menu, which is annoying. I have tried to click and drag on the menu bar, there was room for more icons, but they didn't budge. Anything under the "toolbar" has been helpful. Help tell me do right click on my toolbar and then click on 'Customize'... which did not come as an option. I would like to really all my favorites toolbar (I have about 10) or real on the toolbar visible, not hidden in a small dropdown tab menu.
    There is a plug-in that allows you to put bookmarks in two rows on your toolbars, but it is not compatible with my version of FF (7.0.1).
    App Tabs are cute, but I don't like them on top where they take place where I have the legs for various open websites (I usually opened several at once). App Tabs are fixed and do not move as site tabs, which is extremely annoying and so why I 1) want to move to the bottom of the toolbar or 2) be able to view all my bookmarks toolbars - which is what I prefer.
    BTW, I have Windows 7.
    Thanks in advance for your help.

    App tabs are special tablets and are always displayed at the left end of the tab bar.

    You can place all the bookmarks that you want to see the toolbar of bookmarks in the bookmarks toolbar folder.

    You can do this in the sidebar or the Manager of bookmarks if you can't do it on the bookmarks toolbar.

    Most visited is a special file (smart) which shows the websites that you have visited and are not necessarily Favorites, so you can not drag on the personal bar unless you first to bookmark the. You can make it open in a tab by clicking on Star on location bar twice and choose the toolbar of bookmarks as destination folder.

  • How to add the full value of two buttons?

    How to add the full value of two buttons (any key) VI and display it in the output text box? I am attaching a sample program, but I know that his evil... Help, please

    Try this

  • HP Laserjet P1102: Two rows of black dots on every print

    I recently removed the seals and tested a few impressions, but each of them contains two rows of black dots on the left side (a line more fat and other points more small rank). I did the cleaning print but no use. Here are some pictures of the question. I can print any document, but the points are the problem. I run on the genuine laser HP cartridge by default. Also, the points are spaced the same way.  Any help would be appreciated...

    No! The load inside the cartridge is bad

  • Concatenate two rows

    Hello

    I have a requirement where to check a table with a list of values in reference data.

    I get two rows with a column for each output that every time and I need to concatenate the two rows in a field.

    Is there any combination/processor that can be used to do this?

    I tried concatenate / merge and merge data from processors without success.

    Any direction is much appreciated.

    Thank you

    SID

    It is not clear what criteria do you use to determine which records to eat together. The research is not relevant?

    If it's all the records that spent searching you need to eat, it's simple, you can just add a grouping key (for example to add string to a value of 1 attribute), and then group and merge, creating a merged with output value ' delimited list by a "which is used to create the string.

  • Repeat parent node values in all rows of the child

    In the xml editor, how we could repeat the parent values in all rows of the child in Model Builder if there is more than one query in the sql report.

    Try


    or post the output example

  • ORA-06502: PL/SQL: digital or value error: character string buffer too smal

    Hi experts,


    Please check my query

    DECLARE
    f utl_file.file_type;
    s NVARCHAR2 (32000);
    VARCHAR2 (10) F1;
    F2 char (1);
    F3 VARCHAR2 (100);
    F4 VARCHAR2 (100);
    F5 VARCHAR2 (100);
    F6 DATE;
    F7 DATE;
    F8 DATE;
    F9 DATE;
    F10 DATE;
    F11 char (1);
    BEGIN
    DBMS_OUTPUT. ENABLE (100000);
    f: = utl_file.fopen ('MID5010_DOC1TP', 'OPT_CM_BASE.txt', 'R');

    LOOP
    BEGIN
    UTL_FILE. GET_LINE (f, s);

    F1: = REGEXP_SUBSTR (s, "[^ |]") +', 1, 1);
    F2: = REGEXP_SUBSTR (s, "[^ |]") +', 1, 2);
    F3: = REGEXP_SUBSTR (S, "[^ |]") +', 1, 3);
    F4: = REGEXP_SUBSTR (S, "[^ |]") +', 1, 4);
    F5: = REGEXP_SUBSTR (S, "[^ |]") +', 1, 5);
    F6: = REGEXP_SUBSTR (S, "[^ |]") +', 1, 6);
    F7: = REGEXP_SUBSTR (S, "[^ |]") +', 1, 7);
    F8: = REGEXP_SUBSTR (S, "[^ |]") +', 1, 8);
    F9: = REGEXP_SUBSTR (S, "[^ |]") +', 1, 9);
    F10: = REGEXP_SUBSTR (S, "[^ |]") +' 1, 10);
    F11: = REGEXP_SUBSTR (s, "[^ |]") +', 1.11);

    insert into OPTUM_ICD10CM_BASE
    (OF THE CODE
    STATUS,
    SHORT_DESCRIPTION,
    LONG_DESCRIPTION,
    FULL_DESCRIPTION,
    CODE_EFFECTIVE_DATE,
    CHANGE_EFFECTIVE_DATE,
    TERMINATION_DATE,
    RELEASE_DATE,
    CREATION_DATE,
    VALIDITY)
    VALUES (F1,
    F2,
    F3,
    F4,
    F5,
    F6,
    F7,
    F8,
    F9,
    F10,
    F11);
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
    EXIT;
    END;
    END LOOP;

    UTL_FILE. FCLOSE (F);
    END;
    ------------

    and format text as below


    A50.0 | Short | Long | Full | 01/01/2009 | / 01/2009 | 01/01/2013. 18/09/2012 | C |
    A50.1 | Short | Long | Full | 01/01/2009 | 01/01/2009 | 001-2013 | 18/09/2012 | C |
    A50.2 | Short | Long | Full|01-01-2009|01-01-2009|67|01-01-2013|09-18-2012| C |
    A50.3 | Short | Long | Full | 011-2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A50.4 | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | 5.
    A50.5 | R | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A50.6 | Short | Long | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A50.7 | Short | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    2345. Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A60.0 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A60.1 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A60.2 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A60.3 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A60.4 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A60.5 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A60.6 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A60.7 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A60.8 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A60.9 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A70.0 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A70.1 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A70.2 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A70.3 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A70.4 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    B222 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A4.1 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A4.2. N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A4.3 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A4.4 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A4.5 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A4.6 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A4.7 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A4.8 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A4.9 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A5.0 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A5.1. N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A5.2. B: Short | Long | Full|01-01-2009|01-01-2009|01-10-2013|01-01-2013|09-18-2012| C |
    A5.3 | B: Short | Long | Full|01-01-2009|01-01-2009|01-10-2013|01-01-2013|09-18-2012| C |
    D642 | B: Short | Long | Full|01-01-2009|01-01-2009|01-10-2013|01-01-2013|09-18-2012| C |
    A5.5 | B: Short | Long | Full|01-01-2009|01-01-2009|01-10-2013|01-01-2013|09-18-2012| C |
    A5.6 | B: Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A5.7 | C | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A001 | C | Short update | Long update | Full update | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A009 | C | Short update | Long update | Full update | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A5.10. C | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A0109 | C | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    F10.0 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    F10.1 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    F10.2 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    F10.3 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    F10.4 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    F10.5 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    F10.6 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    F10.7 | N | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A30 | C | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A316 | C | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |
    A317 | C | Short | Long | Full | 01/01/2009 | 01/01/2009 | 01/01/2013. 18/09/2012 | C |


    but I make an error such as ORA-06502: PL/SQL: digital or value error: character string buffer too small

    Please help me

    See now, you really have to think carefully, the code of operation step by step. Then you could help you.

    I told you to use a when others share to block emergency inside the LOOP and you that has changed in the external main block! Why?

    Simply change and recheck.

Maybe you are looking for