Oracle11g 单行子查询返回多行。在这种情况下我应该怎么做

Oracle11g 单行子查询返回多行。在这种情况下我应该怎么做,oracle11g,Oracle11g,您应该确保子查询只返回您想要的行,方法是从您正在更新的表中提供正确的联接,或者如果您只希望返回多行中的一行,那么请使用“WHERE ROWNUM=1”(或其他RDBMS或Oracle 12c中的LIMIT子句)检查您的select并查看错误所在。没有数据,很难发现错误。 UPDATE STG_ABS_DSD_RECEIPTS_PI_WRK1 A SET ( RECEIPT_HEADER_KEY, ORIG_ACNTNG_EFF_DATE, GL_DEPT_ID,

您应该确保子查询只返回您想要的行,方法是从您正在更新的表中提供正确的联接,或者如果您只希望返回多行中的一行,那么请使用“WHERE ROWNUM=1”(或其他RDBMS或Oracle 12c中的LIMIT子句)

检查您的select并查看错误所在。没有数据,很难发现错误。
UPDATE STG_ABS_DSD_RECEIPTS_PI_WRK1 A
SET
(
    RECEIPT_HEADER_KEY,
    ORIG_ACNTNG_EFF_DATE,
    GL_DEPT_ID,
    RECEIPT_DATE,
    RECEIPT_TIME,
    TOTAL_INVOICE_COST_HDR,
    SUM_EXTENDED_COST_AMT
) =
(SELECT
    HDR_RECEIPT_HEADER_KEY,
    HDR_ORIG_ACNTNG_EFF_DATE,
    HDR_GL_DEPT_ID,
    HDR_RECEIPT_DATE,
    HDR_RECEIPT_TIME,
    HDR_SUM_TOTAL_INVOICE_COST,
    PIEDW_EXTENDED_COST_AMT
FROM
    STG_ABS_DSD_RECEIPTS_PI_WRK4 B
WHERE
    A.SUPPLIER_KEY = B.PIEDW_SUPPLIER_KEY
AND
    A.STORE_KEY = B.PIEDW_STORE_KEY
AND
    RTRIM(LTRIM(A.SUPPLIER_INVOICE_NBR,0)) = RTRIM(LTRIM(B.PIEDW_SUPPLIER_INVOICE_NBR,0))
AND
    TO_DATE(A.PIEDW_INV_TRAN_DATE,'YYYYMMDD') = B.PIEDW_INVOICE_DATE
AND
    B.HDR_FOUND_FLAG IN ('N', 'MY'))
WHERE EXISTS
    (SELECT 1 FROM STG_ABS_DSD_RECEIPTS_PI_WRK4 B
     WHERE
         A.SUPPLIER_KEY = B.PIEDW_SUPPLIER_KEY
     AND
         A.STORE_KEY = B.PIEDW_STORE_KEY
     AND
         RTRIM(LTRIM(A.SUPPLIER_INVOICE_NBR,0)) = RTRIM(LTRIM(B.PIEDW_SUPPLIER_INVOICE_NBR,0))
     AND
         TO_DATE(A.PIEDW_INV_TRAN_DATE,'YYYYMMDD') = B.PIEDW_INVOICE_DATE
     AND
         B.HDR_FOUND_FLAG IN ('N', 'MY'));