Inherited primary key - how to realize (INVOICE - ITEM_OF_INVOICE example)

Hi,
how to realize (=create) following. I have two tables, first table is 'INVOICE' (PK is column INVOICE_NO) and second table is 'ITEM_OF_INVOICE' (PK is columns INVOICE_NO [inherited from table 'INVOICE'] and 'ITEM_ID').
Table: INVOICE
PK: INVOICE_NO
INVOICE_NO | COL2 | COL3 | ... | COLN |
1000001 | ... | ... | ... | ... |
1000002 | ... | ... | ... | ... |
1000003 | ... | ... | ... | ... |
Table: ITEM_OF_INVOICE
PK: INVOICE_NO, ITEM_ID
INVOICE_NO | ITEM_ID | COL3 | ... | COLN |
10000001 | 1 | ... | ... | ... |
10000001 | 2 | ... | ... | ... |
10000001 | 3 | ... | ... | ... |
10000001 | ... | ... | ... | ... |
10000001 | n | ... | ... | ... |
10000002 | 1 | ... | ... | ... |
10000002 | 2 | ... | ... | ... |
10000002 | ... | ... | ... | ... |
10000002 | n | ... | ... | ... |
10000003 | 1 | ... | ... | ... |
10000003 | 2 | ... | ... | ... |
10000003 | ... | ... | ... | ... |
10000003 | n | ... | ... | ... |
To summarize
- I want to "inherit" INVOICE_NO from table 'INVOICE' to table 'ITEM_OF_INVOICE'
- I also want to start all ITEM_ID with 1 and increment with 1 for each item in each invoice, some kind of sequence I guess...
Pls, advice and tell me how to realize above.
Thx in advance!
Edited by: user8819407 on Feb 12, 2010 1:31 PM

Hi,
Whene inserting the data in the first table, using "returning into" clause, you can get the value to be inserted into the child table.
let us say the invoice has a sequence invoice_seq to generate unique invoice numbers...
declare
    v_invoice_no number;
begin
Insert into  INVOICE (invoice_no,  col2, col3..) values (
  invoice_seq.nextval,  col2, col3....)
returning invoice_no into v_invoice_no;
---- You can use the v_invoice_no to make insert statements into the child table.
Insert into invoice_items
  select v_invoice_num, invoice_item_seq.nextval,
           col4, col5.... from temp ;   ---How do you get teh records for items..?How do you get these records for the child table (for inserting). Do you take it from some temporary table..?
Unless it is done as a batch process, inserting using 1,2,3.... within a given invoice is kind of difficult for concurrency reasons. What if you have 1 and 2 items numbers for a given invoice and two concurrent sessions try to insert a third item..Should one of them error out..? Logically, it should not.
I would suggest you use a different seuqence for the item ID instead of assigning 1....n numbers for each item. You can always get the result you need by using the row_number analytic function.

Similar Messages

  • Solved: ADF BC and primary keys - how to implement without using triggers

    Using the following OBE as an example:
    http://www.oracle.com/technology/obe/obe9051jdev/ADFWorkshop/BuildingADFApplicationsWorkshop.htm
    There is just one view that has CustomerId defined as a primary key, where the value for the primary key comes from the customer_seq sequence.
    How do you create the model using ADF BC entity to create an entity object that has a primary key that needs to be populated by a sequence table when inserted WITHOUT using a trigger?
    Basically I want to just use ADF BC instead of toplink in the OBE. We do not use triggers to insert primary keys, so this example is a good match for what I need.
    Can someone help me out. How do I adjust the model to use just ADF BC - how do I define the entity object to use a sequence. Do I just override the create method in the impl? Is it that simple? Or is there a way to do this point and click in the entity tool.
    Thanks!

    I'm not the dba (or one of several) - so don't shoot the messenger... the dba's do not like to use triggers in the code. I have been told that this has caused too many problems in application development.
    I don't ask why, just deal with the fallout.
    I did try using the following code in a create method:
    protected void create(AttributeList attributeList)
    super.create(attributeList);
    SequenceImpl s = new SequenceImpl("customers_seq", getDBTransaction());
    // this.setCustId(s.getSequenceNumber());
    this.createPrimaryKey(s.getSequenceNumber());
    When I run the test program for the module, I get a new entry with the id empty and greyed out. I was hoping that this would be filled in on the actual insert, but no joy. As soon as I try to commit, I get an error:
    (oracle.jbo.AttrValException) JBO-27014: Attribute CustId in CustomersWSView is required)
    So what needs to be done?
    Message was edited by:
    klee

  • How to set two attributes as  a primary key in database ?

    how to set two attributes as a primary key?
    Take COffeesbreak as an example ,
    let's suppose that there are cof_name ,sup_id,price and so on;
    the same cof_name may be suplied by more sup_ids,
    and one sup_id may suply more cof_names.
    so the Primary key should be set the cof_name and sup_id ,
    how to set ?
    (of course that i konw if I set a cof_id,the problem will be easy work out
    but now there are those like above)
    I set that as following:
    create table coffees (cof_name VARCHAR(32) PRIMARY KEY,sup_id INTEGER, PRIMARY KEY,PRICE INTEGER )
    THE database print error :cant add more primary keys!
    thanks in advance

    You can only use the PRIMARY KEY declaration on a column if it is the only Primary Key column.
    Use the PRIMARY KEY constraint statement instead.
    create table coffees (
      cof_name VARCHAR(32),
      sup_id INTEGER,  
      PRICE INTEGER,
      PRIMARY KEY ( cof_name ,sup_id )
    )Dave

  • How to use 2 primary key in 1 table

    Hi,
    When i creating the table,in this the following are the columns Name,Street,City,Pin in this they give some rules the column Name & City as Primary Key. But when type the query it shows the error table contains one primary key, how i do this? Tell the mistakes

    Hi,
    Welcome to the forum!
    Whenever you have a question, please post your code. Ithelps people understand what the problem is. and allows them to test ideas.
    1000492 wrote:
    Hi,
    When i creating the table,in this the following are the columns Name,Street,City,Pin in this they give some rules the column Name & City as Primary Key. But when type the query What do you mean by "But when type the query"?
    Do you mean "But when I run this query ..."?
    it shows the error table contains one primary key, how i do this? What is the query you're running? What are the results? Did you expect other results? What results did you expect? Why?
    Tell the mistakesThere are not necessarily any mistakes.
    By definition, a table can never have more than 1 primary key. (If needed, a table can have any number of unique keys, that are like primary keys in everything but name.)
    Any key, primary or unique, can be composed of 1, 2, 3 or more columns.

  • APEX and Primary Keys

    Hello:
    I ran into a situation where we have a table with no primary key set. When I tried to create a form, APEX told me that a primary key must be set in order to run reports. This makes complete sense. No issue here. For some of our tables, we can set the primary key.
    The issue we have is that some of our tables are using "natural primary keys". We have tables where more than one column is designated as a primary key. For example, if I have a table with patient_id, organization_id, insurance_id, and expiration date. In order for a record to be unique in this table both the organization_id and insurance_id are set as primary keys.
    If I attempt to create a form in APEX using these tables which have more than one primary key, how will APEX know that there are more than one primary key?
    Thanks for the input.

    In that case you could also use rowid and instead of views. I have an example showing how
    this can be done:
    http://apex.oracle.com/pls/otn/f?p=31517:157
    Denes Kubicek
    http://deneskubicek.blogspot.com/
    http://www.opal-consulting.de/training
    http://apex.oracle.com/pls/otn/f?p=31517:1
    -------------------------------------------------------------------

  • Primary key violation exception in auto increment column

    Hi All,
    I am facing one issue in Multi threaded environment.
    I am getting Primary key violation exception in auto increment column. I have a table and the primary key is the auto increment column, and I have a trigger which is populating this column.
    5 threads are running and inserting the data in the table and throwing Primary key violation exception randomly.
    create table example (
    id number not null,
    name varchar2(30)
    alter table example
    add constraint PK1example primary key (id);
    create sequence example_id_seq start with 1 increment by 1;
    create or replace trigger example_insert
    before insert on example
    for each row
    begin
    select example_id_seq.nextval into :new.id from dual;
    end;
    Any idea how to handle auto increment column(trigger) in Multi threaded environment??
    Thanks,

    user13566109 wrote:
    Thanks All,
    Problem was in approach; removed the trigger and placed a seq.nextval in insert query. It has resolved the issue.I very much suspect that that was not the issue.
    The trigger would execute for each insertion and the nextval would have been unique for each insertion (that's how sequences work in oracle), so that wouldn't have been causing duplicates.
    I suspect, more likely, that you had some other code somewhere that was using another sequence or some other method of generating the keys that was also inserting into the same table, so there was a conflict in the sources of the sequences being generated.
    The way you showed you had coded above, was a perfectly normal way to assign primary keys from a sequence, and is not a problem in a multi user/threaded environment.

  • In JDO, can a foreign key be part of a primary key?

    Hi, it's possible to have a foreing key a part of a primary key in JDO?
    The JDO checker is complaining about that. It says "Primary key field 'person' cannot declare relationship".
    For example, if I have an entity 'Person' (id, name) and and entity 'Pet' (name, age). Can I have the primary key of 'Person' (id) as a foreign key in 'Pet', and can I have a compound primary key in 'Pet' with 'name' and 'id' as the compound key?
    Thanks in advance.
    Rafael

    Hi Dino,
    First of all, thank you very much for your answer.
    I read the article, but the solution proposed isn’t clear to me. The theorical solution is: “You'll have to map the foreign key columns to individual simple fields in your class rather than a single related object. At runtime, you can use the values of these fields to construct an application identity instance, which you can then use to fetch the related object”
    I don’t understand the second sentence… how would I fecht the related object at runtime?
    Did you try it? Could you please send me an example? I change the type of my attributes to primitive types, and I left my .jdo and .map files as if those attributes were only primary keys… how would I specify the relation at runtime with the other table?
    My email is [email protected], I would really appreciate your help.
    Best regards,
    Isidro

  • Altering Primary Key Constraint

    hi this may sound silly .
    but is it possible to alter a primary key constraint and add another column to it ?
    eg. >desc t1
    c1 number(3) not null
    c2 number(3)
    here I have created primary key on column c1.
    Now I want to alter this constraint and add second column also as part of primary key constraint (so that it will be composite primary key )
    How do i do that ? Do the column needs to be empty ?
    Thanks

    You should use ALTER TABLE DROP CONSTRAINT / ADD CONSTRAINT option.
    Do the column needs to be empty ?Because primary key constraint supposes NOT NULL constraints for columns
    included into primary key, all columns havn't to have nulls values (NOT NULL constraint will be added to c2 column):
    SQL> create table t1 (c1 number(3) not null, c2 number(3));
    Table created.
    SQL> alter table t1 add constraint t1_pk primary key(c1);
    Table altered.
    SQL> insert into t1 values(1,1);
    1 row created.
    SQL> insert into t1 values(2,null);
    1 row created.
    SQL> commit;
    Commit complete.
    SQL> alter table t1 drop constraint t1_pk;
    Table altered.
    SQL> alter table t1 add constraint t1_pk primary key (c1,c2);
    alter table t1 add constraint t1_pk primary key (c1,c2)
    ERROR at line 1:
    ORA-01449: column contains NULL values; cannot alter to NOT NULL
    SQL> update t1 set c2 = 3;
    2 rows updated.
    SQL> alter table t1 add constraint t1_pk primary key (c1,c2);
    Table altered.
    SQL> desc t1
    Name                                      Null?    Type
    C1                                        NOT NULL NUMBER(3)
    C2                                        NOT NULL NUMBER(3)Rgds.

  • Help me to return the primary key after insert the row

    Hi
    I am using JDBC, with oracle database. i have welformed normalization tables .i am inserting parent table with dynamic sequence number as primary key .after inserting i need inserted row primary key .how to get the inserted row primary key with out using select statement
    please help me
    Thanks in advance
    Edited by: 849614 on Apr 4, 2011 5:41 AM
    Edited by: 849614 on Apr 4, 2011 5:54 AM

    Hello
    If I undestand you, I think you should do this:
    Connection conexion = dataSource.getConnection();
    int idCenter=-1;
    String query = "Begin Insert into CENTER (NAME_CENTER) values (?) returning ID_CENTER into ?; end";
    callableStatement = conexion.prepareCall(query.toString());     
         callableStatement.setString(1, "Center name");               
         callableStatement.registerOutParameter(2, java.sql.Types.INTEGER);
              callableStatement.executeUpdate();
              idCenter=callableStatement.getInt(2);
    This way, you have in idCenter the primary key of the line that has just been inserted.
    Edited by: cris on 05-abr-2011 5:28

  • Primary Key rule Violation error while Insert Record in Compact DB

    Hi All,
    I have One Table in Server Name "Student"  when i Synchronize this with the help of Microsoft Synchronization Framework
    same Table schema with Data has been create in CompactDataBase.
    When i insert data in CompactDataDase it give me Primary Key Violation error.
    Please Suggest
    Example
    Table Structure is as Follows:-
    Create Table Student(
    [Emp_id] int IDENTITY(1,1) NotNull,[Emp_Name] int NOTNULL );insert into Student Values('John');insert into Student Values('Joe');Thanks & RegardsNamit Jain

    try this and see if it solves,
    also, Emp_name data type is int. it should be varchar.
    I suspect the reason is because you already have some data in student table but you identity seeds were not updated and hence it is trying to insert a row with emp_id value that already exists.and hence the primary key violation. also, your table DDL did
    not really have an primary key but it would still error since you are inserting duplicate row in the identity column.
    so, try resetting the identity seed value to the max(emp_id) in the table.
    select max(Emp_ID) from  student
    --use the output of the above statement
    DBCC CHECKIDENT ('Student', RESEED,<<--use the output of the above statement-->>)
    --your max(emp_id) should match with last_value column in the below( do not if this query would run in compact DB though)
    select seed_value,increment_value,last_value from sys.identity_columns where object_id=object_id('Student')
    now, try your insert.
    Hope it Helps!!

  • Can I modify primary key or I need to drop it to create another overhide?

    I am getting this issue when I try to create another primary key in my table. The example bellow express the situation.
    TABLE AAA
    (ID
    NAME
    REGISTER)
    PK: ID
    I cannot drop the primary key, cause the table have some FK, so, I was thinking about to try "modify" this key (to put too other field), but I have not found one way to do it, I think just I can drop out the FKs, drop PK after, and create another new primary key after all, but this issue can be bring on a big trouble with other tables, there is another way to fix it, modifyng or just overhide the key?
    Thanks all and apologize about my bad english!

    Disable the refrencing FKs, then drop and recreate the PK. You will also have to modify the FKs. You can, alternatively, create a unique constraint on the new column combination.

  • How to create one primary key for each vendor

    Hi all
    i am doing IDOC to jdbc scenario
    i am triggering idoc from R/3 and the data is going into DB table vendor through XI.
    structures are as follows:
    sender side: ZVendorIdoc (this is a customized IDOC , if i triger IDOC for multiple vendors then it triggers only 1 idoc with multiple segment )
    Receiver side:
    DT_testVendor
        Table
            tblVendor
                action UPDATE_INSERT
                access                     1:unbounded
                    cVendorName         1
                    cVendorCode        1
                    fromdate                1
                    todate                    1
                 Key1
                    cVendorName         1
    if i trigger idoc for multiple vendors ,for example vendor 2005,2006 and 2010 . then i can see that the only key comes from the very first field (2005) and the whole record for vendor 2005,2006 and 2010  goes into the table with this(2005) as a primary key
    now again if i send data for these three vendor 2005, 2006 , 2010, in which record for the vendor 2005 is same and for 2006 and 2010 are different than it takes 2005 as a primary key and it does not update the data in the table.
    my requirement is like this:   for each vendor there should be one unique key assigned.
                                              for above said example there should come three keys one for each vendor .
    could you please help me how to do this???????????

    Hi,
      In Mapping Make the statement is 0-unbounded.For each vendor create a statement.This will solve your problem.
    Regards,
    Prakasu.M

  • How do I add a record's primary key to a query string and add that to an .xml catalog?

    Hello everyone,
    I am using Dreamweaver CS3 on a MacBook Pro Leopard 10.5.6 and MAMP 1.7. I am also teaching myself how to work with PHP and MySQL, using David Powers book The Essential Guide to Dreamweaver CS3.
    I am trying to create a wedding photography web site, with a personal page after login, which will display the photographs of the customers wedding.
    The same page will also be a catalog/shopping cart, so the customer can choose which photo's they want, and pay for them. (I am aware that there are instructions in The Essential Guide in chapter 15 page 515, on how to redirect to a personal page, but it doesn't fully cover what I am asking).
    I have already created the login success page, which greets users by name, as per the instructions in The Essential Guide. I have also created a catalog page. However my catalog page is not calling information from the database, instead it is taking information from an XML page using PHP.
    I would like to insert a list menu on the login success page, which lists the customers name, and when they select their name they will then select a link that will take them to a personal page with just their wedding photographs.
    I am unsure of how to pass the customer_id, in what will be the username list menu, to the page which will contain the customers set of wedding images.
    Is it the same process used in chapter 14 where you add a record's primary key to a query string?
    I am asking because when I set up a recordset from the MySQL database it lists the images as witten names not actual images, I have tried calling the images with PHP code but it just doesn't work.
    The catalog page I have set up at the moment is not calling the images from the database, but directly from the image folder.
    Is what I am trying to do possible?
    If so how do I pass the customer_id and username to a recordset and link that recordset to the xml catalog so the customers personal wedding images are displayed on the catalog page for the shopping cart?  I need step by step instructions, or maybe a link to a good tutorial.
    Can somebody help me please?
    Thankyou.

    QuickTime 7 can set the poster frame, but I've not had much success with it. This is what QuickTime 7 Help says about this topic:
    +A "poster frame" is a still image of a movie that represents the movie in places like the Finder. The default poster frame is the first frame in the movie. You can change the poster frame.+
    +To change a movie's poster frame:+
    +In QuickTime Player 7, drag the playhead (or use the arrow keys to move the playhead) to the desired frame.+
    +Choose View > Set Poster Frame.+
    +To view a movie's poster frame, choose View > "Go to Poster Frame."+
    If you don't have QuickTime 7 (version 7.6.6) it can be installed from your Snow Leopard disc using a custom install. Otherwise download it from this Apple site: http://support.apple.com/kb/DL923
    John

  • How do I create an Entity Bean with unknown primary keys

    Hi,
    Can a good folk help me.
    I am mapping an entity bean to an oracle table for the purpose of logging . I do not need a primary key contraint on this table. How do I specify in my entity bean file descriptor not to use any field for primary key ...
    I have done this so far...
    in my ejb.xml file - I set....
    <prim-key-class>java.lang.Object</prim-key-class>
    and deleted ....
    <primkey-field>...</primkey-field>
    My table structure is .....
    CREATE TABLE FAMS_REQUEST_LOG (
    EDITEDBY VARCHAR2(20),
    OLDTRANSDATE DATE,
    REQUESTID VARCHAR2(30) NOT NULL,
    OLDQTY NUMBER(20),
    NEWQTY NUMBER(20),
    NEWTRANSDATE DATE)
    but I still get this error message on deploying...
    [#|2006-03-01T14:30:29.250+0100|INFO|sun-appserver-pe8.1_02|javax.enterprise.system.tools.deployment|_ThreadID=19;|Total Deployment Time: 11000 msec, Total EJB Compiler Module Time: 0 msec, Portion spent EJB Compiling: 0%|#]
    [#|2006-03-01T14:30:29.265+0100|SEVERE|sun-appserver-pe8.1_02|javax.enterprise.system.tools.deployment|_ThreadID=19;|Exception occured in J2EEC Phase
    com.sun.enterprise.deployment.backend.IASDeploymentException: Fatal Error from EJB Compiler -- JDO74046: JDOCodeGenerator: Caught a MappingConversionException loading or creating mapping model for application 'fixassetenterpriseapp' module 'FixAssetEnterpriseApp-EJBModule': JDO71030: There is no column in table FAMS_REQUEST_LOG which can be used to support the servers implementation of unknown key classes.
    at com.sun.ejb.codegen.CmpCompiler.compile(CmpCompiler.java:274)
    at com.sun.ejb.codegen.IASEJBC.doCompile(IASEJBC.java:615)
    at com.sun.ejb.codegen.IASEJBC.ejbc(IASEJBC.java:563)
    at com.sun.enterprise.deployment.backend.EJBCompiler.preDeployApp(EJBCompiler.java:340)
    at com.sun.enterprise.deployment.backend.EJBCompiler.compile(EJBCompiler.java:209)
    at com.sun.enterprise.deployment.backend.AppDeployer.runEJBC(AppDeployer.java:284)
    at com.sun.enterprise.deployment.backend.AppDeployer.deploy(AppDeployer.java:176)
    at com.sun.enterprise.deployment.backend.AppDeployer.doRequestFinish(AppDeployer.java:107)
    at com.sun.enterprise.deployment.phasing.J2EECPhase.runPhase(J2EECPhase.java:146)
    at com.sun.enterprise.deployment.phasing.DeploymentPhase.executePhase(DeploymentPhase.java:71)
    at com.sun.enterprise.deployment.phasing.PEDeploymentService.executePhases(PEDeploymentService.java:633)
    at com.sun.enterprise.deployment.phasing.PEDeploymentService.deploy(PEDeploymentService.java:188)
    at com.sun.enterprise.deployment.phasing.PEDeploymentService.deploy(PEDeploymentService.java:520)
    at com.sun.enterprise.management.deploy.DeployThread.deploy(DeployThread.java:143)
    at com.sun.enterprise.management.deploy.DeployThread.run(DeployThread.java:172)
    |#]
    Dotun

    you will have to create a sequence and a trigger
    CREATE SEQUENCE <SEQUENCE NAME>
    INCREMENT BY  1
    START WITH  1
    NOCACHE
    /this sequence will guarantee that each requested number is unique
    the trigger will select from this sequence and insert the obtained value in the new record
    CREATE OR REPLACE TRIGGER <TRIGGER NAME>
    BEFORE INSERT ON <TABLE NAME>
    REFERENCING NEW AS NEW OLD AS OLD
    FOR EACH ROW
        BEGIN
            select
                <SEQUENCE NAME>.nextval
            into
                :NEW.<COLUMN NAME>
            from
                dual;
        END;
    [/CODE]
    this will always take the value from the sequence, even if you already provided a value yourself
    (otherwise you will first have to test if :NEW.<column name> is null, but I wouldn't do this for a key column.
    if you need the generated key back for further processing (inserting it into a child table for example), you can use the returning clause on the insert statement
    see the oracle documentation for more information about sequences, triggers and the returning clause
    greetings
    Freek D
    I am new to Oracle and need to know how to create a table that uses an automatic incrementation on a primay key for it's default. I need the uniqueness automatically managed by the DBMS.. This activity is know as setting the Column (primary key with identity) in Ms-SQL..
    Your help would be appreciated greatly....
    Thanks....

  • How can I use the SQL to create a primary key for a existing table?

    create table a(bm number,mc varchar2(20));
    when the table was created,i want to make the column bm as
    the primary key and my SQL is "alter table a enable primary key bm",the system show
    me error,how can I write the right one?

    create table a(bm number,mc varchar2(20));
    when the table was created,i want to make the column bm as
    the primary key and my SQL is "alter table a enable primary key bm",the system show
    me error,how can I write the right one? You do not have any primary key defined on your table yet, so, it does not make sense to enable it (if at all possible) !
    You need to add PRIMARY KEY using something like this:
    SQL> alter table a add constraint pk_a_bm primary key (bm) ;

Maybe you are looking for