I am trying to run something like this:
INSERT INTO TABLE_A
(RULE_ID, SYSTEM_KEY, FIELD, FIELD_VALUE, SOURCE_FIELD_VALUE_DESCRIPTION)
values ((SELECT TO_NUMBER(max(RULE_ID) + 1) as RULE_ID from TABLE_A),6,'CARS',22,'TOYOTA')
however, I keep getting an error:
SQL compilation error: Invalid expression [(SELECT CAST((CAST(TO_NUMBER(MAX(TABLE_A.RULE_ID), 18, 5) AS NUMBER(18,5))) + 1 AS NUMBER(38,0)) AS "RULE_ID" FROM DB.SCHEMA.TABLE_A AS TABLE_A)] in VALUES clause
I don't see any erorrs in my query though, do you know why this is happening?
To fix it use simple INSERT INTO SELECT
:
INSERT INTO TABLE_A
(RULE_ID, SYSTEM_KEY, FIELD, FIELD_VALUE, SOURCE_FIELD_VALUE_DESCRIPTION)
SELECT (SELECT TO_NUMBER(max(RULE_ID) + 1) as RULE_ID from TABLE_A),6,'CARS',22,'TOYOTA';
Second: MAX(...) + 1
is not safe with concurrent queries. A much safer approach is usage of SEQUENCE or IDENTITY column.