product_id is the primary key of product and is the column number . When you define a table
CREATE TABLE stock ( product_id REFERENCES product , product_name REFERENCES product , color VARCHAR2(20) , memory VARCHAR2(20) , in_stock NUMBER(3) );
both product_id and product_name implicitly defined as number columns that reference the product_id column from product . Since product_name defined as number , you cannot insert the string "Nexus 4".
It makes no sense to have a product_name column in the stock table. It already exists in the product table where it belongs. It violates the basic rules of normalization for storing the same information in several places. I would strongly suspect that color and memory should exist in the product table, and not in the stock table.
Your DDL seems to be valid syntax (quite shocking), but it is very, very unusual. I have been doing Oracle for many years, and I have never seen anyone create a table this way. It seems valid, but it is going to reset all who should support your application after you. It would be much wiser to be explicit
CREATE TABLE stock ( product_id NUMBER REFERENCES product( product_id ) , product_name VARCHAR2(40) ,
source share