Oracle从不同的表合并到delete中

时间:2016-06-24 17:05:10

标签: sql oracle

我最后有删除语句。基本上,我只想删除合并返回的行或匹配。是否可以在一个MERGE INTO ${TABLE_NAME} T USING ( SELECT ERRORCODE, PROCESSINGFILENAME, RECORDNUMBER from ERROR_UPLOAD_T ) TMP ON (T.RECORDNUMBER = TMP.RECORDNUMBER and T.PROCESSINGFILENAME= TMP.PROCESSINGFILENAME and T.PROCESSINGFILENAME='${new_err_xml}') WHEN MATCHED THEN UPDATE SET T.STATUS = 'ERROR', T.ERRORSOURCE = 'BRM', T.ERRORCODE = TMP.ERRORCODE DELETE from ERROR_UPLOAD_T WHERE PROCESSINGFILENAME like '${new_err_xml}'; 语句中进行?

MERGE INTO ${TABLE_NAME} T
USING (
    SELECT
    ERRORCODE, PROCESSINGFILENAME,
    RECORDNUMBER from ERROR_UPLOAD_T
 ) TMP
ON (T.RECORDNUMBER = TMP.RECORDNUMBER and
T.PROCESSINGFILENAME= TMP.PROCESSINGFILENAME and
T.PROCESSINGFILENAME='${new_err_xml}')
WHEN MATCHED THEN
UPDATE SET
    T.STATUS = 'ERROR',
    T.ERRORSOURCE = 'BRM',
    T.ERRORCODE = TMP.ERRORCODE;

if (sql%rowcount > 0) then
    DELETE from ERROR_UPLOAD_T WHERE
    PROCESSINGFILENAME like '${new_err_xml}';
end if;

COMMIT;
END;
/

如果不可能这样,请告诉我更好的方法。使用sqlplus在shell脚本中调用此特定语句。

编辑:我试过这种方式,看起来很有效。

BEGIN

 for (var i = 0; i < menu.length; i++){

       menu[i].firstchild.innerHTML.addEventListener("click", function(){

            // Assign value of node clicked on to button 
            button.childNodes[0].nodeValue = menu[i].firstChild.innerHTML;

       });
 }

2 个答案:

答案 0 :(得分:1)

我设法通过以下方式更改查询来实现结果。

BEGIN
MERGE INTO ${TABLE_NAME} T
USING (
    SELECT
    ERRORCODE, PROCESSINGFILENAME,
    RECORDNUMBER from ERROR_UPLOAD_T
 ) TMP
ON (T.RECORDNUMBER = TMP.RECORDNUMBER and
T.PROCESSINGFILENAME= TMP.PROCESSINGFILENAME and
T.PROCESSINGFILENAME='${new_err_xml}')
WHEN MATCHED THEN
UPDATE SET
    T.STATUS = 'ERROR',
    T.ERRORSOURCE = 'BRM',
    T.ERRORCODE = TMP.ERRORCODE;

if (sql%rowcount > 0) then
    DELETE from ERROR_UPLOAD_T WHERE
    PROCESSINGFILENAME like '${new_err_xml}';
end if;

COMMIT;
END;
/

答案 1 :(得分:1)

不,您不能从源表(来自using子句)或其他地方删除作为合并本身的一部分。 From the documentation

  

指定DELETE where_clause 以在填充或更新表时清理表中的数据。受此子句影响的唯一行是目标表中由合并操作更新的那些行。

所以你只能从目标表中删除,这不是你想要的。