[ https://issues.apache.org/jira/browse/DERBY-3155?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13894368#comment-13894368 ]
Knut Anders Hatlen commented on DERBY-3155: ------------------------------------------- The handling of parameters seems to have some issues: {noformat} ij> create table t1(x int); 0 rows inserted/updated/deleted ij> create table t2(x int); 0 rows inserted/updated/deleted ij> prepare ps as 'merge into t1 using t2 on ? when not matched then insert values (1)'; ij> execute ps; 0 rows inserted/updated/deleted WARNING 02000: No row was found for FETCH, UPDATE or DELETE; or the result of a query is an empty table. ij> execute ps using 'values true'; IJ WARNING: Autocommit may close using result set ERROR 07009: No input parameters. {noformat} I'd expect the first execution to fail because the parameter was not bound, but it succeeded. In the second execution, a parameter value was provided, but that one *did* fail saying there were no parameters. > Support for SQL:2003 MERGE statement > ------------------------------------ > > Key: DERBY-3155 > URL: https://issues.apache.org/jira/browse/DERBY-3155 > Project: Derby > Issue Type: Improvement > Components: SQL > Reporter: Trejkaz > Assignee: Rick Hillegas > Labels: derby_triage10_10 > Attachments: MergeStatement.html, MergeStatement.html, > MergeStatement.html, derby-3155-01-ac-grammar.diff, > derby-3155-02-ag-fixParserWarning.diff, > derby-3155-03-ae-backingStoreHashtableWithRowLocation.diff, > derby-3155-03-af-backingStoreHashtableWithRowLocation.diff, > derby-3155-03-ag-backingStoreHashtableWithRowLocation.diff, > derby-3155-03-ah-backingStoreHashtableWithRowLocation.diff, > derby-3155-04-ae-deleteAction.diff, derby-3155-04-af-deleteAction.diff, > derby-3155-05-aa-triggerTransitionTableAsTarget.diff, > derby-3155-06-aa-triggerTransitionTableAsSource.diff, > derby-3155-07-ad-insertAction.diff, derby-3155-08-ah-updateAction.diff, > derby-3155-09-aa-correlationNames.diff, > derby-3155-10-aa-correlationNames.diff, > derby-3155-11-ab-beforeTriggersCantFireMerge.diff, > derby-3155-12-aa-canOmitInsertColumnList.diff, > derby-3155-13-aa-allowSystemAndTempTables.diff, > derby-3155-14-aa-replaceCorrelationNamesOnLeftSideOfSETclauses.diff, > derby-3155-15-aa-replumbMergeResultSetCleanup.diff, > derby-3155-16-aa-treatCurrentRowLocationNodeLikeBaseColumnNode.diff, > derby-3155-17-aa-serializingRowLocations.diff, > derby-3155-18-aa-basicView.diff, > derby-3155-19-aa-forbidSubqueriesInMatchedClauses.diff, > derby-3155-20-aa-reworkColumnMatching.diff > > > A relatively common piece of logic in a database application is to check for > a row's existence and then either update or insert depending on its existence. > SQL:2003 added a MERGE statement to perform this operation. It looks like > this: > MERGE INTO table_name USING table_name ON (condition) > WHEN MATCHED THEN UPDATE SET column1 = value1 [, column2 = value2 ...] > WHEN NOT MATCHED THEN INSERT column1 [, column2 ...] VALUES (value1 [, > value2 ...]) > At the moment, the only workaround for this would be to write a stored > procedure to do the same operation, or to implement the logic client-side. -- This message was sent by Atlassian JIRA (v6.1.5#6160)