Oracle 在plsql块中动态传递契约id

Oracle 在plsql块中动态传递契约id,oracle,plsql,Oracle,Plsql,这里我正在更新一个特定的合同id。 我需要一次性更新所有合同ID, i、 e在plsql块中动态传递契约id DECLARE VAR1 NUMBER := 0; CURSOR C1 (P_CONTRACT_ID IN NUMBER) IS SELECT GO.CONTRACT_ID, GO.COLUMN46, GO.COLUMN1, GO.ORG_ID

这里我正在更新一个特定的
合同id
。 我需要一次性更新所有
合同ID

i、 e在plsql块中动态传递契约id

DECLARE
    VAR1   NUMBER := 0;

    CURSOR C1 (P_CONTRACT_ID IN NUMBER)
    IS
        SELECT GO.CONTRACT_ID,
               GO.COLUMN46,
               GO.COLUMN1,
               GO.ORG_ID
          FROM XYZ GO
         WHERE GO.CONTRACT_ID = P_CONTRACT_ID AND GO.COLUMN46 IS NULL;
BEGIN
    BEGIN
        SELECT NVL (MAX (TO_NUMBER (COLUMN46)), 0)
          INTO VAR1
          FROM XYZ
         WHERE CONTRACT_ID = 525215;
    EXCEPTION
        WHEN OTHERS
        THEN
            VAR1 := 0;
    END;

    FOR F1 IN C1 (525215)
    LOOP
        VAR1 := VAR1 + 1;

        BEGIN
            UPDATE XYZ
               SET COLUMN46 = VAR1
             WHERE     CONTRACT_ID = F1.CONTRACT_ID
                   AND COLUMN46 IS NULL
                   AND COLUMN1 = F1.COLUMN1;
        EXCEPTION
            WHEN OTHERS
            THEN
                NULL;
        END;
    END LOOP;

    COMMIT;
EXCEPTION
    WHEN OTHERS
    THEN
        NULL;
END;

更改光标并删除where条件:

CURSOR C1
IS
    SELECT GO.CONTRACT_ID,
           GO.COLUMN46,
           GO.COLUMN1,
           GO.ORG_ID
      FROM XYZ GO
     WHERE GO.COLUMN46 IS NULL;
您也可能希望在id select时删除它:

    SELECT NVL (MAX (TO_NUMBER (COLUMN46)), 0)
      INTO VAR1
      FROM XYZ
     --WHERE CONTRACT_ID = 525215
     ;
您还应该阅读有关生成ID的序列和触发器的内容;-)

它正在以单个顺序更新所有合同ID 511522 1 511522 511522 3 511522 4 560853 5 511522 6 511522 7 560853 8 560853 9 560853 10 560853 11所以您想动态更改“525215”吗?顺便说一句,禁用caps lock;)怎么样当其他逻辑炸弹爆炸时,您应该真正删除所有这些
。如果由于索引块损坏而导致第一次查找失败怎么办?我见过这种情况。您真的希望它只设置
VAR1:=0然后继续,好像一切都很好?