Given just the tables you have you can't do this. But that's not to say it can't be done. :-)
Ideally you should change ORDER.PART
to CHAR(50)
to match the PARTS_NUM
fields on the other tables - otherwise you won't be able to store all the possible PARTS_NUM on an ORDER. Perhaps there are business reasons for it being as it is, and perhaps someone was just clueless. No matter - try to fix it up if you can. It won't stop you completely, though.
Create another table - let's call it PARTS_ALL. It has two fields - PARTS_NUM which should match the data type of the PARTS_NUM fields on PARTS_INV and PARTS_NONINV, and SOURCE which should be VARCHAR2(1). Make the combination of (PARTS_NUM, SOURCE) the primary key. So it looks like
CREATE TABLE ALL_PARTS
(PARTS_NUM CHAR(50),
SOURCE VARCHAR2(1) NOT NULL,
CONSTRAINT PK_ALL_PARTS
PRIMARY KEY (PARTS_NUM, SOURCE));
You then copy the data from PARTS_INV and PARTS_NONINV into ALL_PARTS, adding the appropriate SOURCE value:
INSERT INTO ALL_PARTS (PARTS_NUM, SOURCE)
SELECT PARTS_NUM, 'I' AS SOURCE FROM PARTS_INV
UNION ALL
SELECT PARTS_NUM, 'I' AS SOURCE FROM PARTS_NONINV
Now you define a couple of triggers on PARTS_INV and PARTS_NONINV to propagate inserts and deletes on those tables to ALL_PARTS:
CREATE TRIGGER PARTS_INV_AID
AFTER INSERT OR DELETE ON PARTS_INV
FOR EACH ROW
BEGIN
IF INSERTING THEN
INSERT INTO ALL_PARTS (PARTS_NUM, SOURCE) VALUES (:NEW.PARTS_NUM, 'I');
ELSIF DELETING THEN
DELETE FROM ALL_PARTS WHERE PARTS_NUM = :OLD.PARTS_NUM;
END IF;
END PARTS_INV_AID;
/
CREATE TRIGGER PARTS_NONINV_AID
AFTER INSERT OR DELETE ON PARTS_NONINV
FOR EACH ROW
BEGIN
IF INSERTING THEN
INSERT INTO ALL_PARTS (PARTS_NUM, SOURCE) VALUES (:NEW.PARTS_NUM, 'N');
ELSIF DELETING THEN
DELETE FROM ALL_PARTS WHERE PARTS_NUM = :OLD.PARTS_NUM;
END IF;
END PARTS_NONINV_AID;
/
Now your application suite can continue to INSERT and DELETE rows from PARTS_INV and PARTS_NONINV as they've always done, and those changes will be propagated to ALL_PARTS.
NOW (finally!) you can define your foreign key from ORDERS to ALL_PARTS and get the validation you wanted:
ALTER TABLE ORDER
ADD CONSTRAINT ORDER_FK1
FOREIGN KEY (PART) REFERENCES ALL_PARTS (PARTS_NUM);
Is this ideal? No. IDEALLY you'd get rid of PARTS_INV and PARTS_NONINV, and replace them with ALL_PARTS, modifying all your applications and web apps and back-office software to use the new table - so probably not gonna happen - but given the situation you find yourself in it may be about as good as you can do.
dbfiddle here