[英]Oracle SQL MERGE query missing keyword issue
不知道我在这里缺少什么关键字..从互联网上的各种示例和看起来正确的文档..非常感谢任何帮助。 难道是因为 Oracle 不支持嵌套的 MERGE 语句?
输入是:
workflowId='CHILD1'
processName='TEST4'
sectionId=''
dependsOnWorkflowId='PARENT1'
dependsOnProcessName='TEST4'
dependsOnSectionId=''
查询是
MERGE INTO WF_CMN_A_PROCESS_DEPENDENCY_TREE_TEST3 USING DUAL
ON ( "WORKFLOW_ID" = :workflowId
AND "PROCESS_NAME" = :processName
AND NVL("SECTION_ID", '-') = NVL(:sectionId, '-')
)
-- Root node exists, create a parent-child link and delete the root node
WHEN MATCHED THEN UPDATE SET
"DEPENDS_ON_WORKFLOW_ID" = :dependsOnWorkflowId,
"DEPENDS_ON_PROCESS_NAME"= :dependsOnProcessName,
"DEPENDS_ON_SECTION_ID" = :dependsOnSectionId,
"LAST_UPDT_DT_TM" = SYSDATE
WHERE
"WORKFLOW_ID" = :workflowId
AND "PROCESS_NAME" = :processName
AND NVL("SECTION_ID", '-') = NVL(:sectionId, '-')
AND "DEPENDS_ON_WORKFLOW_ID" IS NULL
AND "DEPENDS_ON_PROCESS_NAME" IS NULL
AND "DEPENDS_ON_SECTION_ID" IS NULL
WHEN NOT MATCHED THEN
MERGE INTO WF_CMN_A_PROCESS_DEPENDENCY_TREE_TEST3 USING DUAL
ON ( "WORKFLOW_ID" = :workflowId
AND "PROCESS_NAME" = :processName
AND NVL("SECTION_ID", '-') = NVL(:sectionId, '-')
AND NVL("DEPENDS_ON_WORKFLOW_ID" ,'-') = NVL(:dependsOnWorkflowId , '-')
AND NVL("DEPENDS_ON_PROCESS_NAME",'-') = NVL(:dependsOnProcessName, '-')
AND NVL("DEPENDS_ON_SECTION_ID" ,'-') = NVL(:dependsOnSectionId , '-')
)
WHEN NOT MATCHED THEN
INSERT (
"WORKFLOW_ID",
"PROCESS_NAME",
"SECTION_ID",
"DEPENDS_ON_WORKFLOW_ID",
"DEPENDS_ON_PROCESS_NAME",
"DEPENDS_ON_SECTION_ID",
"LAST_UPDT_DT_TM"
)
VALUES (
:workflowId,
:processName,
:sectionId,
:dependsOnWorkflowId,
:dependsOnProcessName,
:dependsOnSectionId,
SYSDATE
)
这是错误:
org.jkiss.dbeaver.model.sql.DBSQLException: SQL Error [905] [42000]: ORA-00905: missing keyword
at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl.executeStatement(JDBCStatementImpl.java:133)
at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.executeStatement(SQLQueryJob.java:544)
at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.lambda$0(SQLQueryJob.java:451)
at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:171)
at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.executeSingleQuery(SQLQueryJob.java:458)
at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.extractData(SQLQueryJob.java:847)
at org.jkiss.dbeaver.ui.editors.sql.SQLEditor$QueryResultsContainer.readData(SQLEditor.java:3515)
at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:118)
at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:171)
at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:116)
at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:4852)
at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:105)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
Caused by: java.sql.SQLSyntaxErrorException: ORA-00905: missing keyword
MERGE 语句中不能有 MERGE。 您唯一的选择是WHEN MATCHED THEN UPDATE
和WHEN NOT MATCHED THEN INSERT
。 我怀疑你想要类似的东西:
MERGE INTO WF_CMN_A_PROCESS_DEPENDENCY_TREE_TEST3 USING DUAL
ON ( "WORKFLOW_ID" = :workflowId
AND "PROCESS_NAME" = :processName
AND NVL("SECTION_ID", '-') = NVL(:sectionId, '-')
)
-- Root node exists, create a parent-child link and delete the root node
WHEN MATCHED THEN UPDATE SET
"DEPENDS_ON_WORKFLOW_ID" = :dependsOnWorkflowId,
"DEPENDS_ON_PROCESS_NAME"= :dependsOnProcessName,
"DEPENDS_ON_SECTION_ID" = :dependsOnSectionId,
"LAST_UPDT_DT_TM" = SYSDATE
WHERE
"WORKFLOW_ID" = :workflowId
AND "PROCESS_NAME" = :processName
AND NVL("SECTION_ID", '-') = NVL(:sectionId, '-')
AND "DEPENDS_ON_WORKFLOW_ID" IS NULL
AND "DEPENDS_ON_PROCESS_NAME" IS NULL
AND "DEPENDS_ON_SECTION_ID" IS NULL
WHEN NOT MATCHED THEN INSERT (
"WORKFLOW_ID",
"PROCESS_NAME",
"SECTION_ID",
"DEPENDS_ON_WORKFLOW_ID",
"DEPENDS_ON_PROCESS_NAME",
"DEPENDS_ON_SECTION_ID",
"LAST_UPDT_DT_TM"
)
VALUES (
:workflowId,
:processName,
:sectionId,
:dependsOnWorkflowId,
:dependsOnProcessName,
:dependsOnSectionId,
SYSDATE
)
虽然我确定我错过了你正在做的一些细微差别。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.