当我在select语句中运行下面的insert时,我得到ORA 00937
因为下面的查询无法处理APPLICATIONS
表上的一个子选择。我不想硬编码这个值。有什么建议吗?
提前致谢。
insert into CONFIGURATION_PARAMETER_VALUES
( ID
, NAME
, DESCRIPTION
, DATA_TYPE
, VALUE_STRING
, VALUE_INTEGER
, VALUE_DATE
, VALUE_FLOAT
, VALUE_TIMESTAMP
, APPLICATION_ID
, DELETED
)
select NVL(MAX(ID),0)+1
, 'Alert_Statuses_AllExceptNoStatus'
, 'Suspicious'
, 'String'
, 'RBS_EIM_AL_008'
, null
, null
, null
, null
, (select ID from APPLICATIONS where name = 'Rabobank v 1.0.0.0')
, 'N'
from CONFIGURATION_PARAMETER_VALUES
答案 0 :(得分:1)
如果还不晚,我建议实施SEQUENCE
而不是计算。您可能无法获得严格的数字顺序(可能存在间隙),但每次都会得到一个唯一值:
CREATE SEQUENCE Config_Parm_Values_Seq START WITH <1 + your current max ID>;
另请注意,您现在的INSERT
表现如下:
因此,即使您不使用序列,我也会考虑使用“普通旧”INSERT
而不是INSERT ... SELECT
。此示例使用序列:
insert into CONFIGURATION_PARAMETER_VALUES
( ID
, NAME
, DESCRIPTION
, DATA_TYPE
, VALUE_STRING
, VALUE_INTEGER
, VALUE_DATE
, VALUE_FLOAT
, VALUE_TIMESTAMP
, APPLICATION_ID
, DELETED
) VALUES (
Config_Parm_Values_Seq.NEXTVAL -- Use seqname.nextval to get
-- the next value from the sequence
, 'Alert_Statuses_AllExceptNoStatus'
, 'Suspicious'
, 'String'
, 'RBS_EIM_AL_008'
, null
, null
, null
, null
, (select MAX(ID) from APPLICATIONS where name = 'Rabobank v 1.0.0.0')
, 'N')
答案 1 :(得分:0)
问题出在您使用SELECT
的{{1}}语句中。
当您在SELECT NVL(MAX(ID), 0) + 1
列表中使用MAX
函数时,必须使用SELECT
,这不是此处的解决方案。
使用以下内容:
GROUP BY