Commit Rollback for Parent & Child table

Hi,
I need to load data to a parent table and child table (Record by Record), i.e one record will be loaded to the parent table and the related child record will be loaded to child table.
After first record loaded to child table, the next record will be loaded to the parent table.
My requirement is, I should not commit the parent table before the child record is transferred (so that i can rollback if my record got failed). So I have set the parent table IKM commit option to NO. Because of this, my child record is not loaded to the correcsponding target table, its failed because the parent record is not commited.
Do we have any possiblities to overcome this issue.
Thanks in Advance,
Ram Mohan T

Cezar,
I couldn't make the CKM options to "No Commit". When i did that i am getting the following error at step "16 - Control - CUSTOMER_DET - insert PK errors" ,
12838 : 72000 : java.sql.SQLException: ORA-12838: cannot read/modify an object after modifying it in parallel.
This error occurs at the CKM. so i have made all the CKM options to "commit" and IKM, LKM to "No Commit". It seems to be fine.
Cezar,
I have some plan for the scenario that i mentioned in the previous update (One dept id and all related employees). Please verify this,
1) create a procedure which extracts dept_id from source tab and passes it to the scenario(in target tab) of a package.
2) This package has the variable of dept_id, interface1 which loads data to dept and following that another procedure(2).
3) This procedure2 will extract the emp_id that corresponds to the value of the variable dept_id. And passes this emp_id to tha scenario in target tab.
4) This scenario is of a package which has the emp_id variable and interface2 for loading employees.
While executing this plan, the problem is,
1) Interface1 which loads Dept_Id is not commited (due to the KMs with commit set to "No Commit"), so that the employee records are getting loaded to the error table.
2) I have made the interface1 KM commit option to "Default: Yes " (But still the Knowledge modules steps are No commit), but still the child records are getting loaded to error table.
3) As per the above scenario, all these transforamtions are not taking in the same transaction. Thats the problem i believe.
Do we have any possiblities to overcome this Cezar?
Thanks in Advance,
Ram Mohan T
Edited by: T. Ram Mohan on Mar 5, 2009 11:43 AM

Similar Messages

  • Loading to Parent -Child Tables simultaneously

    I have a requirement to populate parent-child tables in a single interface simultaneoulsy. I couldnt find anyway to add multiple targets and am wondering why this key feature is absent in ODI. The same thing is easily achievable in BPEL.
    Could some one please advice a work around for this.
    Your help is much appreaciated

    ODI 11g does come with a new IKM 'IKM Oracle Multi Table Insert'. This does allow multi table inserts, but will require more than one interface.
    Oracle Multi-Table Inserts
    A new Integration KM for Oracle allows populating several target tables from a single source, reading the data only once. It uses the INSERT ALL statement.
    COMPONENT NAME: IKM Oracle Multi Table Insert
    COMPONENT VERSION: 11.1.2.4
    AUTHOR: Oracle
    COMPATIBILITY: ODI 11.1.1.3 and above
    DESCRIPTION:
         - Integrates data from one source into one to many Oracle target tables in append mode, using a multi-table insert statement (MTI).
    REQUIREMENTS:
         - Oracle Database 9iR1 or above
         - See BASIC CONFIGURATION section
    BASIC CONFIGURATION
         - This IKM must be used in integration interfaces that are sequenced in a Package:
              - The first interface of the Package must have a temporary target and the KM option DEFINE_QUERY set to YES.
              This first interface defines the structure of the SELECT clause of the multi-table insert statement (that is the source flow).
              - Subsequent integration interfaces must source from this temporary datastore and have the KM option IS_TARGET_TABLE set to YES.
              - The last interface of the Package must have the KM option EXECUTE set to YES in order to run the multi-table insert statement.
              - Do not set "Use Temporary Interface as Derived Table(Sub-Select)" set to true on any of the interfaces.
         - If large amounts of data are appended, consider to set the KM option OPTIMIZER_HINT to /*+ APPEND */.
    OPTIONS (Refer to the Option descriptions for more information on each option)
         - DEFINE_QUERY: Set to Yes if this interface describes the source query (SELECT clause of the statement). This interface must have a temporary target.
         - IS_TARGET_TABLE: Set to Yes this interface using the source query to load one of the target tables. This interface must source from an interface with a temporary target using this IKM and having the KM option DEFINE_QUERY set to YES.
         - EXECUTE: Set to Yes for the last interface in the Package. This interface will run the multi-table insert statement.
         - COMMIT: Commit transaction. This applies only to the last interface in the Package.
         - TRUNCATE: Set to Yes to truncate this interface target table.
         - CREATE_TARG_TABLE: Create target table? May only be used on target interfaces, but not on source interfaces (defining the source data).
         - OPTIMIZER_HINT: Hint for the multi-table insert statement.
    RESTRICTIONS:
         - This KM can only be used in integration interfaces that are part of a Package.
         - All source and target datastores need to reside on same data server.
         - Journalized source data is not supported.
         - Temporary indexes are not supported.
         - Flow/static control is not supported.
         - The TRUNCATE option cannot work, if the target table is referenced by another table (foreign key).

  • How can we archive Partioning in parent child tables in Normalised way.

    Hi Friends.
    Could you please suggest me
    How can we archive Partioning in parent child tables in Normalised way.
    Bill_parent(
    Bill_no number,
    Bill_date date .-- I want to create Partition on this column
    customer_id
    Bill_Child{
    bill_no number,
    Bill_c_no number,
    Item_code number
    Qty number
    Bill_Acsry{
    Bill_c_no number,
    acsry_it_code number,
    qty number
    Now for there Child Table I have also create a Bill_date column that is against Normalization
    i.e
    Bill_parent(
    Bill_no number,
    Bill_date date.
    customer_id
    ) Partion by Range (Bill_date).......................
    Bill_Child{
    bill_no number,
    Bill_c_no number,
    Item_code number
    Qty number,
    Bill_Date date,-- against normalisation
    }Partion by Range (Bill_date).......................
    Bill_Acsry{
    Bill_c_no number,
    acsry_it_code number,
    qty number,
    Bill_Date date,-- against normalisation
    }Partion by Range (Bill_date)....
    with regards
    Siddharth Singh([email protected])

    Looks like the new Reference Partitioning feature in 11g is what you want. In previous versions I think you're stuck with the denormalisation.

  • No data for Parent-child hierarchy column in Pivot table view

    Hi all,
    I used OBIEE 11.1.1.6.2 Version.
    I drag one Parent-child hierarchy column and one measure and show result with a pivot table view.
    But when I click "+" icon to show detail level data,
    It messaged that: "*the layout of this view combined with the data,selections,drills,or prompt values chosen resulted in no data*."
    But it can show every-level data when I used table view.
    It was so strange..
    Did anybody meet this before?
    Thanks in advance.
    regards,
    Anne

    Hi,
    Yes, I have the same problem with pivot table for hierarchy dimension.
    If you use a normal table (not pivot) it seem to work. Unfortunatley with restrictions as normal table view have.
    Same problem still exist in 11.1.1.6.5
    I have logged a SR to Oracle about this.

  • Insert Record with Parent/Child Tables doesn't work with Oracle - unlike AC

    Hi,
    I just Migrated a MS Access 2010 Database to an Oracle 11g Backend with the SQL Developer Tool.
    The Migration went fine, all the Tables and Views are migrated.
    I'm working with MS Access as Frontend.
    The application has some Datasheets with Subdatasheets with Parent/Child Relationship. (1-n Relationship)
    After changing to Oracle, it's not possible, to Insert a new Record in a Subdatasheet I always get the following Error Message:
    "The Microsoft Access database engine cannot find a record in the table 'xxxx' with key matching field(s) 'zzzzz'"
    It used to work perfect with the MS Access Backend, do I need a trigger which first adds the child Record ?
    Or what should I do?
    Thank you

    Hi Klaus,
    Thanks for your answer. I still haven't solved my problem. The only way would be to use a singel 1:n Relationship, but in fact I need a n:m Relationship.
    I tried the same scenario with a new Access Application, same result.
    To clearify my problem.
    Goal: Parent Form with Parent Records, Linked Child Form with Child Records in a Datasheet View => Insert of a NEW Child Record.
    I have 3 Tables (table1 = Parent tabel, table2 = Child Table, table12 = n:m Tabel with PK and two FK)
    The Recordsource of the Parent Form is Tabel1
    The Recordsource of the Child Form is Table2 joined with Table12.
    In my Old Access Project, Access Triggered the Insert and filled Table12 with the NEW PK of Table2.
    It seems like Access can't do that anymore....
    I'm pretty desperate and I'm sure it is just a litte thing to fix.....

  • SHOW THE PARENT CHILD TABLE RELATIONSHIP TABLE

    hi experts,
    I want show the parent child relation ship tables
    for exmple iam passing the emp table then display related child tables like dept,grade after that again child table(dept,grade) related to child relationship tables like recursive
    Regards,
    VENKAT

    Probably something like below. This may not be exactly what you are looking for, but one way to get what you are asking for.
    Only if you can give specifics, of your Input being passed and the Output, it might be possible to provide more help. But you also need to help us with your best effort on this.
    select *
      from (
            select prior table_name Child, table_name Parent
              from user_constraints
             start with constraint_name = some_constraint_name_of_Parent_Table
            connect by constraint_name = prior r_constraint_name
           ) a
    where a.child is not null;

  • Parent - child tables foreign key relation ship

    Hi All,
    we have 600 hundred tables ..i would like to print a hierarchial tree based on the foreigh key relathionship
    i tried my best but i couldnt.
    parent table
    child table 1
    childtable3
    child table 2
    and so
    Can somebody help me out with a query?
    Thanks,
    kt

    CREATE OR REPLACE FUNCTION get_child_tables (
    ptable VARCHAR2,
    powner VARCHAR2 DEFAULT 'SCOTT',
    plevel NUMBER DEFAULT 10
    RETURN stringarray
    -- -- create this ON SQL*PLUS "CREATE OR REPLACE TYPE STRINGARRAY AS TABLE OF VARCHAR2(50);"
    -- AUTHID CURRENT_USER
    PIPELINED
    AUTHOR DATE VERSION COMMENTS
    ======================================================================================
    [email protected] 26-OCT-2009 1.0 Developed to ease developers effort to find Nth level of Referential integrity
    ======================================================================================
    -- PURPOSE -> To find PARENT=> CHILD relational TABLE(S) in Oracle upto a depth max N Level.
    --SYNTAX TO USE
    SELECT * FROM TABLE( get_child_tables('DEPT','SCOTT',3)); Store this query in a file for your use
    SELECT * FROM TABLE( get_child_tables('EMPLOYEE')); Store this query in a file for your use
    -- RESULTS looks as below
    --1 => DEPT
    --2 => EMP
    --2 => EMP2
    --3 => EMP_CHILD
    --3 => EMP2_CHILD
    -- and so on
    --This can be leveraged to use in any oracle database REGION 10g having and above.
    --This FUNCTION gives formatted result of the Oracle 10g Hierarchical query result coded in the cursor
    --to find MASTER => CHILD relational TABLE(S) upto a depth max 10 Level.
    --The result of the PIPELINED function can be retrieved using Oracle new operator
    --TABLE(array name) in SQL query.
    --Due to the AUTHID CURRENT_USER compiler directive any user can use based on his/her access privileges on the database.
    --GRANT EXECUTE ON SCOTT.get_child_tables TO PUBLIC;
    --CREATE OR REPLACE PUBLIC SYNONYM get_child_tables FOR SCOTT.get_child_tables;
    IS
    atname stringarray := stringarray ();
    -- create this ON SQL*PLUS CREATE OR REPLACE TYPE STRINGARRAY AS TABLE OF VARCHAR2(50);
    vlevel NUMBER;
    vtname VARCHAR2 (50);
    nindex NUMBER := 0;
    bprocessed BOOLEAN := FALSE;
    CURSOR c1 (powner_in IN VARCHAR2, ptable_in VARCHAR2, plevel_in NUMBER)
    IS
    SELECT LEVEL, LPAD (' ', (LEVEL - 1) * 2, ' ') || pt AS "TNAME"
    FROM (SELECT a.owner w1, a.table_name pt, a.constraint_name c1,
    a.r_constraint_name r1, b.owner w2, b.table_name ct,
    b.constraint_name c2, b.r_constraint_name r2
    FROM all_constraints a, all_constraints b
    WHERE a.constraint_name = b.r_constraint_name(+)
    AND a.owner = b.owner(+)
    AND a.owner =
    UPPER (powner)
    -- Change Owner here while testing
    --AND A.r_constraint_name IS NULL
    AND a.constraint_type IN ('P', 'R')) v1
    START WITH pt =
    UPPER
    (ptable)
    -- Change your master table here while testing the QUERY
    CONNECT BY PRIOR ct = pt AND LEVEL <= plevel;
    -- Change lavel here while testing
    BEGIN
    atname.EXTEND;
    atname (1) := 'NOTHING';
    OPEN c1 (powner, ptable, plevel);
    LOOP
    bprocessed := FALSE;
    FETCH c1
    INTO vlevel, vtname;
    IF nindex > 1 AND atname (atname.LAST - 1) = vtname
    THEN
    --DBMS_OUTPUT.PUT_LINE('2 ==== vtname  ' ||vtname || '   '|| atname.count|| '   '||atname.last ||  '   '||atname( atname.last-1));
    bprocessed := TRUE;
    END IF;
    IF NOT bprocessed
    THEN
    nindex := nindex + 1;
    atname.EXTEND;
    atname (nindex) := vtname;
    PIPE ROW (vlevel || ' => ' || vtname);
    DBMS_OUTPUT.put_line ( ' **** nindex - atname( nindex) '
    || nindex
    || ' - '
    || atname (nindex)
    DLOG('ADDING ',vTname); A LOGGING ATONOMUS PROCEDURE FOR DEBUG PURPOSE
    END IF;
    EXIT WHEN c1%NOTFOUND;
    END LOOP;
    CLOSE c1;
    FOR i IN 1 .. atname.COUNT
    LOOP
    DBMS_OUTPUT.PUT_LINE('atname (i) ' ||atname (i));
    END LOOP;
    RETURN;
    EXCEPTION
    WHEN no_data_needed
    THEN -- THIS EXCEPTION HAS TO BE THERE TO GET THE FUCTION WORKABLE
    DBMS_OUTPUT.put_line (SQLERRM);
    RETURN;
    END get_child_tables;
    /

  • Parent - child table issue wrt to count - SQL question

    I have a scenario:
    There are 2 tables (parent and child). lets say, case summary table and task level dimension table.
    for every case id in case summary table, there would be multiple tasks in task level dim table with a flag indicator set to 1 for all tasks.
    but while counting the number of cases active with flag indicator 1 (ofcourse when joining case summary table with task dimension table), for a case id only 1 instance of task needs to be accounted (even though it has more than one task , for counting active cases, the flag ind corresponding to a task in a case if set to 1 , then the case is considered active)..but while joining and taking count of case ids with flag indicator as 1, you get the count of every task row of a case which is incorrect logically. how to discard the rest of child records of a case in child table (task dimension table)?
    I am not sure how to achieve this in sql query
    Kindly help!
    Case summary table
    case id, busininess_unit, agent_name
    1001, admin, Ram
    1002, Finance, Sam
    task table
    case id, task_id,task_name, flag_indicator
    1001, 1, 'New', 1
    1001,2, 'Open',1
    1001,3,'In progress',1
    1002, 4, 'New', 1
    (In fact task_id is not a big deal... even you can assume task id doesn't exist..only task name ... )
    now my question... if my query should get the current active cases (ind=1); as per above it should essentially give 2... but my query gives me 4..you know the reason why.. but how do i get the correct count?
    Thanks!

    may be you need just this:
    select count(distinct case_id) from task
    where indicator = 1;
    If this is not what you are looking for, please elaborate and tell us the expected output and rest of the details as mentioned in FAQ Re: 2. How do I ask a question on the forums?:

  • Parent Child tables to be displayed as nested table

    I want to design a report on External DB tables that have  a parent - child relationship.
    The way I want the report is to show the child entries nested within each parent row and I want to have a
    "collapse/hide" button on each row when clicked to toggle between collapsing/hiding all the child entries on a parent row.

    First U have to crate Extended View Object to your actual View obj.
    Now take Page with Panel  Splitter ,on First facet drag View obj as table and on second Facet Drag Extended View Obj as table.On page loading U have delete all rows from Extended View object.And then u have write bean code on button click to get current select rows from above view objct,and for Filter rows from Second View obj according to selection of rows from first view obj...

  • SQL for Parent-Child Hierarchy

    Please suggest which would be best way to achieve the below logic.
    SQL to pick up parent child relationship within same table with a certain logic.
    Example:
    mod_product_number     Product_Hierarchy     
    H555888     PH05678     
    H888987     H555888     
    H8889     H555888     
    H9955     H555888     
    H999999     H555888     
    P6666     H999999     
    P5555     H999999     
    Example: I expect the rows with H8889,H9955 & P6666 & P5555 to be sub-category values value for product hierarchy H555888.     
    If there are rows with H8888987 as Product_hierarchy, we will pull up those rows too for product hierarchy H555888.
    The extra condition is we drill down only on 7 character mod_prod_number not on 5 character mod_prod_number. We pull out all sub category mod_prod_number for all distinct Product hierarchy.

    You can use Hierarchical Queries
    See.. http://docs.oracle.com/cd/E11882_01/server.112/e10592/queries003.htm
    select lpad(' ',2*(level-1)) || to_char(trim(t.mod_product_number)) prod,
      SYS_CONNECT_BY_PATH(t.product_hierarchy, '/') "Path",
      LEVEL
      from temp_table t
      start with trim(t.product_hierarchy) = 'PH05678'
      connect by prior trim(t.mod_product_number) = trim(t.product_hierarchy);
    .     PROD          Path                    LEVEL
    1     H555888          /PH05678                1
    2       H8889          /PH05678 /H555888           2
    3       H888987     /PH05678 /H555888           2
    4       H9955          /PH05678 /H555888           2
    5       H999999     /PH05678 /H555888           2
    6         P5555     /PH05678 /H555888 /H999999      3
    7         P6666     /PH05678 /H555888 /H999999      3

  • Parent child tables - how to maintain RI

    Here is my scenario:
    In our model, we have parent child relationship between tables.
    We are not sure how the parent tables are populated. If incremental update, it should be fine (assuming if needed rows will be inserted in the child table manually). If the tables are truncated and data is inserted again – that might be a problem since there exist relationship with child tables. What are the various options for handling such cases?
    Option1: cascade delete
    Option 2: ...?

    I'm not sure I understand the goal here...
    - Are you trying to design a data model? If so, wouldn't the business and data requirements tell you whether you need to truncate and reload the parent table or whether you can do an incremental load? It wouldn't seem to make sense to design a data model with no understanding of how the model is going to be used.
    - Are you trying to design a load process that works with an existing data model? If so, are you trying to design an incremental load? Or a load that involves a truncate and reload? Does the existing data model have foreign key constraints?
    Specifying the Oracle version and a bit of information about the application (i.e. is this an OLTP application, a data warehouse, something else) would probably also be helpful.
    Justin

  • SubSelect Not filter data for Parent/Child hierarchy

    I have data for my parent /child dimension like that
    DimCust
    Fact Sal
    Customer ID
    Parent ID
    Customer Type
    Product Id
    Customer ID
    Year
    Sales
    1
    1
    Retailer
    4
    1
    2015
    100
    2
    1
    Retailer
    4
    2
    2014
    200
    3
    3
    Retailer
    4
    3
    2014
    300
    4
    3
    Retailer
    4
    4
    2015
    400
    5
    5
    Retailer
    4
    5
    2015
    500
    In my query,
     I use sub select to filter 
    data for year 2014c and product  id 4,  when I got result
     it’s missed the aggregation of customer id 1 and 4.
     Even I try to pass in where clause it’s also not give correct result.
    code,
    with
       set ba EXISTS([DIMCustomer].[Level 02].allmembers, [DIMCustomer].[Hierarchy].&[MyHierarchy],"factTable")
       SELECT
    [Measures].[Sales]
      } ON 0,
    [ba]on 1
    FROM (SELECT ( { [CropYear].[CropYear].&[2014] } ) ON COLUMNS
    FROM (SELECT ( { [DimProduct].[ProductID].[4] } ) ON COLUMNS
    FROM [myCube]))
    please help me on this, what is the best practices.
    Regards,
    Manish

    Hi manishcal16PPS,
    According to your description, you want to slice the fact data on Year 2014 and Product 4. Now you find the result missing the customer 1 and 4. Right?
    In this scenario, based on your Fact Sal table, both customer 1 and 4 are on Year 2015. So when you filter the data, it will not show customer 1 and 4. It returns correct result. For filtering data, either using sub select or specifying slicer axis
    can achieve your requirement.
    Reference:
    Specifying the Contents of a Slicer Axis (MDX)
    Best Regards,
    Simon Hou
    TechNet Community Support

  • Updating records for parent & child with integrity constraints

    Hello, I haven't used oracle in a few years and now running a lab and need to make a few changes for testing. no production data at all.
    What is the easiest way to change the parent and child tables? When I try to change the parent, oracle barks that the child is neglected, when i try to change the child first, then the parent is mad.
    If I need to set up a trigger, what is the simplest form?
    thanks much!

    Depends on what you want your data to look like. Since it's test, I would do what janeesh said. Disable the constraint on the tables, write a script to UPDATE all the necessary values in the parent and child table, and then re-enable the constraint.
    I like the idea of setting the constraint to ENABLE VALIDATE afterwards to check the data in the tables. This verifies that all the updates you did comply with the constraint. Essentially this just checks to see if you hosed anything in either table.

  • Sum within a self-contained parent-child table

    I have two tables - a "key" table containing a multi-layer parent-child relationship, and an "amount" table containing the keys for the leaf nodes in the key table as well as numeric values (e.g. amounts).
    I want a query that returns each row in the key table as well as the sum of the amount table's amounts for all of that key's leaf nodes (so the root node would have the sum of all of the amount values).
    Here's what I mean - I have two tables, KEY and AMOUNT
    KEY has two columns, key and parent_key; key and parent_key have a CONNECT BY relationship on parent_key = prior key (with parent_key null for the root):
    KEY     PARENT_KEY
    0       null
    1       0
    2       0
    3       0
    1A      1
    2A      2
    2B      2
    3A      3
    3B      3
    3C      3
    1A1     1A
    1A2     1A
    2A1     2A
    2A2     2A
    2B1     2B
    3A1     3A
    3A2     3A
    3C1     3C
    3C2     3CAMOUNT has two columns, key and amount; key points to KEY.key, and amount is a value for that particular key
    (note that all key values are leaf nodes in the KEY table)
    KEY     AMOUNT
    1A1     1
    1A2     2
    2A1     3
    2A2     4
    2B1     5
    3A1     6
    3A2     7
    3C1     8
    3C2     9 What I want is a result that looks like this, where each key's amount is the sum of its eventual leaf keys' amounts
    KEY     AMOUNT
    0       45
    1        3
    2       12
    3       30
    1A       3
    2A       7
    2B       5
    3A      13
    3B       0
    3C      17
    1A1      1
    1A2      2
    2A1      3
    2A2      4
    2B1      5
    3A1      6
    3A2      7
    3C1      8
    3C2      9For example, key 2A's value, 7, is the sum of the values of 2A1 and 2A2; key 3's value is the sum of 3A1, 3A2, 3C1, and 3C2.
    Is there a way of doing this with a single query?
    The idea I came up with is, do a select on KEY with a "CONNECT_BY_PATH key" column so each row includes a string containing the keys of all of its ancestors, and then do a join on AMOUNT with amount.key IN the CONNECT_BY_PATH column; however, with a larger amount of data, this takes quite a bit of time. Is there a faster / more obvious way of doing this?

    SQL> with key_tbl as (
      2                   select '0' key,null parent_key from dual union all
      3                   select '1','0' from dual union all
      4                   select '2','0' from dual union all
      5                   select '3','0' from dual union all
      6                   select '1A','1' from dual union all
      7                   select '2A','2' from dual union all
      8                   select '2B','2' from dual union all
      9                   select '3A','3' from dual union all
    10                   select '3B','3' from dual union all
    11                   select '3C','3' from dual union all
    12                   select '1A1','1A' from dual union all
    13                   select '1A2','1A' from dual union all
    14                   select '2A1','2A' from dual union all
    15                   select '2A2','2A' from dual union all
    16                   select '2B1','2B' from dual union all
    17                   select '3A1','3A' from dual union all
    18                   select '3A2','3A' from dual union all
    19                   select '3C1','3C' from dual union all
    20                   select '3C2','3C' from dual
    21                  ),
    22    amount_tbl as (
    23                   select '1A1' key,1 amount from dual union all
    24                   select '1A2',2 from dual union all
    25                   select '2A1',3 from dual union all
    26                   select '2A2',4 from dual union all
    27                   select '2B1',5 from dual union all
    28                   select '3A1',6 from dual union all
    29                   select '3A2',7 from dual union all
    30                   select '3C1',8 from dual union all
    31                   select '3C2',9 from dual
    32                  )
    33  select  key,
    34          nvl(sum(amount),0) amount
    35    from  (
    36           select  connect_by_root k.key key,
    37                   amount
    38             from  key_tbl k,
    39                   amount_tbl a
    40             where a.key(+) = k.key
    41             connect by k.parent_key = prior k.key
    42          )
    43    group by key
    44    order by key
    45  /
    KEY     AMOUNT
    0           45
    1            3
    1A           3
    1A1          1
    1A2          2
    2           12
    2A           7
    2A1          3
    2A2          4
    2B           5
    2B1          5
    KEY     AMOUNT
    3           30
    3A          13
    3A1          6
    3A2          7
    3B           0
    3C          17
    3C1          8
    3C2          9
    19 rows selected.
    SQL> SY.

  • How to create ddl for partitioning for a child table?

    Hi folks,
    I am new to the partitioning topic. I red some manuals and tutorials but I did not found exactly what I need. So I would ask for your help.
    I have two tables.
    The partitioning of the master table is clear:
    create TABLE ASP_PARTITION_TABLE_MASTER
    MASTER_ID VARCHAR2(20) NOT NULL
    , TIMESTAMP DATE
    , DATA VARCHAR2(20)
    , CONSTRAINT ASP_PARTITION_TABLE_MASTE_PK PRIMARY KEY
    MASTER_ID
    USING INDEX
    ENABLE
    PARTITION BY RANGE (TIMESTAMP)
    PARTITION PARTITION1 VALUES LESS THAN (TO_DATE('20090101','YYYYMMDD')) NOCOMPRESS
    , PARTITION PARTITION2 VALUES LESS THAN (TO_DATE('20100101','YYYYMMDD')) NOCOMPRESS
    , PARTITION PARTITION3 VALUES LESS THAN (TO_DATE('20110101','YYYYMMDD')) NOCOMPRESS
    This table should be partitioned by a timestamp.
    Now comes the difficulty:
    I have a child table which has the master_id as foreign key. The slave table should also be partitioned by the timestamp - but this one occurs only in the master table.
    CREATE TABLE ASP_PARTITION_TABLE_SLAVE
    SLAVE_ID VARCHAR2(20) NOT NULL
    , FK_MASTER_ID NUMBER(10)
    , DATA1 VARCHAR2(20)
    , DATA2 VARCHAR2(20)
    , COLUMN1 VARCHAR2(20)
    , CONSTRAINT ASP_PK_SLAVE PRIMARY KEY
    SLAVE_ID
    ENABLE
    ALTER TABLE ASP_PARTITION_TABLE_SLAVE
    ADD CONSTRAINT ASP_FK_MASTER_IS FOREIGN KEY
    SLAVE_ID
    REFERENCES ASP_PARTITION_TABLE_MASTER
    MASTER_ID
    ON DELETE CASCADE ENABLE;
    How can I create such a range partition for the slave table?
    PS: Currently we are using oracle 10.2 but we will upgrade to oracle 11g in near future.
    Thanks in advance,
    Andreas

    @sb92075:
    seems if I should give more details:
    the parent table is holding the master_id, the timestamp and plenty of general information which is valid for all children.
    Each parent has between 5 and 50 children which contain different data items. So our child table is much bigger than the parent table.
    Our selects are joining parent and child table filtered by the timestamp and some other indexed rows, so we are not saving the same timestamp redundantly.
    @bluefrog
    With the partitioning we would like to reach the following goals:
    1. gain more performance (quicker response time)
    2. get the ability to archive and drop partitions which are older than a specific timestamp. (We only need to keep the data of the last 1.5 years so we would like to drop the complete partition / tablespace instead of using a delete-statement which generates much load (transaction, archive, logging)).
    Thank you for your links. I will have a look on it.
    But due to the archiving issue we would also like split up the child table by the timestamp of the parent table.
    Regards, Andreas

Maybe you are looking for