Reputation: 9579
I'm trying to perform a select insert where I need to use a sequence and a distinct clause.
I know we can't use sequences with distinct so, I've nested a subquery inside the FROM, like this:
INSERT INTO SchemaName.XXSON_ST_B2B_CTR_PRICING
(SEQ_NO,SEEB_KEY,MESSAGE_ID,MESSAGE_TYPE,CREATE_DTIME,CHANGE_DTIME,STATUS)
SELECT
XXSON.XXSON_B2B_CTR_PRICING_SEQ.NEXTVAL AS SEQ_NO,
'SESS_NO' AS SEEB_KEY,
srp.ITEM AS MESSAGE_ID,
'MESSAGE_TYPE' AS MESSAGE_TYPE,
sysdate AS CREATE_DTIME,
sysdate AS CHANGE_DTIME,
'I' AS STATUS
FROM
(SELECT distinct srp.ITEM
FROM SchemaName.NB_PRICELIST_CTRL pctrl,
SchemaName.NB_PRICELIST_SRP srp
WHERE STATUS = 'W'
AND SOURCE_TABLE = 'NB_PRICELIST_SRP');
However, with this, I can't insert the srp.ITEM as MESSAGE_ID because I have an invalid identifer (ORA-00904), no surprise here. Is there any workaround so I can do the insert properly?
Upvotes: 1
Views: 835
Reputation: 324
The error message you provided deals with missing or invalid columns. I believe the specific problem with the error message is the srp alias in
srp.item as Message_ID
since you haven't aliased the combination of the 2 tables in the parenthesis (you aliased the individual tables inside, but this does not get carried out). A simple fix is to remove 'srp.' from the front of 'item' in the top statement.
INSERT INTO SchemaName.XXSON_ST_B2B_CTR_PRICING
(SEQ_NO,SEEB_KEY,MESSAGE_ID,MESSAGE_TYPE,CREATE_DTIME,CHANGE_DTIME,STATUS)
SELECT
XXSON.XXSON_B2B_CTR_PRICING_SEQ.NEXTVAL AS SEQ_NO,
'SESS_NO' AS SEEB_KEY,
ITEM AS MESSAGE_ID,
'MESSAGE_TYPE' AS MESSAGE_TYPE,
sysdate AS CREATE_DTIME,
sysdate AS CHANGE_DTIME,
'I' AS STATUS
FROM
(SELECT distinct srp.ITEM
FROM SchemaName.NB_PRICELIST_CTRL pctrl,
SchemaName.NB_PRICELIST_SRP srp
WHERE STATUS = 'W'
AND SOURCE_TABLE = 'NB_PRICELIST_SRP')
On a separate note, I didn't quite understand the inclusion pctrl.
Upvotes: 0
Reputation: 19
Please try the below query this might be help you.
INSERT INTO SchemaName.XXSON_ST_B2B_CTR_PRICING (SEQ_NO,SEEB_KEY,MESSAGE_ID,MESSAGE_TYPE,CREATE_DTIME,CHANGE_DTIME,STATUS) SELECT XXSON.XXSON_B2B_CTR_PRICING_SEQ.NEXTVAL AS SEQ_NO, 'SESS_NO' AS SEEB_KEY, (SELECT distinct srp.ITEM FROM SchemaName.NB_PRICELIST_CTRL pctrl, SchemaName.NB_PRICELIST_SRP srp WHERE STATUS = 'W' AND SOURCE_TABLE = 'NB_PRICELIST_SRP') AS MESSAGE_ID, 'MESSAGE_TYPE' AS MESSAGE_TYPE, sysdate AS CREATE_DTIME, sysdate AS CHANGE_DTIME, 'I' AS STATUS;
Regards.
Upvotes: 0
Reputation: 17157
To get rid of ORA-00904: invalid identifier srp.ITEM
you have to assign an alias
to a derived table
which serves as a normal table stored in memory. An alias in FROM
clause assigned inside a block is not visible outside.
INSERT INTO SchemaName.XXSON_ST_B2B_CTR_PRICING
(SEQ_NO,SEEB_KEY,MESSAGE_ID,MESSAGE_TYPE,CREATE_DTIME,CHANGE_DTIME,STATUS)
SELECT
XXSON.XXSON_B2B_CTR_PRICING_SEQ.NEXTVAL AS SEQ_NO,
'SESS_NO' AS SEEB_KEY,
alias.ITEM AS MESSAGE_ID,
'MESSAGE_TYPE' AS MESSAGE_TYPE,
sysdate AS CREATE_DTIME,
sysdate AS CHANGE_DTIME,
'I' AS STATUS
FROM
(SELECT distinct srp.ITEM
FROM SchemaName.NB_PRICELIST_CTRL pctrl,
SchemaName.NB_PRICELIST_SRP srp
WHERE STATUS = 'W'
AND SOURCE_TABLE = 'NB_PRICELIST_SRP') alias;
Upvotes: 2