INSERT Using Auto Generated Primary Keys (Insert within an Insert)
I have an address table and a Phone table and i have a Sequence and a trigger created for both tables that increments the value of the primary key for the respective tables by one. (as shown below)
create sequence increase_one_seq
start with 1
Increment By 1
nomaxvalue;
CREATE TABLE ADDRESS(
ADDRESSKEY NUMBER(20) NOT NULL PRIMARY KEY,
ADDRESSLINEONE VARCHAR2(100) NOT NULL,
ADDRESSLINETWO VARCHAR2(100),
CITY VARCHAR2(25) NOT NULL,
STATE VARCHAR2(25) NOT NULL,
ZIPCODE NUMBER(6) NOT NULL
*);*
CREATE OR REPLACE TRIGGER ADDRESS_TRIGGER
BEFORE INSERT ON ADDRESS
FOR EACH ROW
BEGIN
Select Increase_One_Seq.Nextval
INTO :NEW.ADDRESSKEY
FROM DUAL;
End ADDRESS_TRIGGER;
*/*
CREATE TABLE PHONE(
* PHONENUMKEY NUMBER(20) NOT NULL PRIMARY KEY,*
* PHONENUMBER NUMBER(10) NOT NULL*
*);*
CREATE OR REPLACE TRIGGER PHONE_TRIGGER
BEFORE INSERT ON PHONE
FOR EACH ROW
BEGIN
Select Increase_One_Seq.Nextval
INTO :NEW.PHONENUMKEY
FROM DUAL;
End PHONE_TRIGGER;
*/*
Now, i have another table called the USERLOGIN table that maps the foreign key to the primary keys that are generated from the above tables, (as shown below)
CREATE TABLE USERLOGIN(
USERLOGINKEY NUMBER(20) NOT NULL PRIMARY KEY,
USERNAME VARCHAR2(20),
PASSWORD VARCHAR2(20),
USERPROFILEKEY NUMBER(20),
ADDRESSKEY NUMBER(20),
Phonenumkey Number(20),
FIRSTNAME VARCHAR2(50) NOT NULL,
Middlename Varchar2(50) Not Null,
LASTNAME VARCHAR2(50) NOT NULL,
CONSTRAINT fk_address FOREIGN KEY (ADDRESSKEY) REFERENCES ADDRESS(ADDRESSKEY),
CONSTRAINT fk_phone FOREIGN KEY (PHONENUMKEY) REFERENCES PHONE(PHONENUMKEY)
*);*
but what i am not sure is when i do the INSERT of a record in the ADDRESS table , how do i use the primary key of the inserted ADDRESS record as the value in this new table..
I tried the following in pseudo Oracle Query code and did not work
Insert Into Userlogin(Username,Password,Addresskey,Phonenumkey,Firstname,Middlename,Lastname) Values(7001,'jsmith','test',
*(Insert into Address(Addresslineone,Addresslinetwo,City,State,Zipcode) Values('123 ABC RD','','TESTCITY','AB',12345) Returning Addresskey),*
*(INSERT into PHONE(PHONENUMBER) VALUES(5139891234) returning phonenumkey),'Jim','Hartman','Smith');*
Any suggestions on how i can make this to work. Basically what I am trying to do is get the primary key of one INSERT query and use that primary key as one of the values to be populated into another INSERT query.
Thanks in advance,
Ajay