---
title: "SQL-016: Update correspondence or endorsement row"
summary: Inline update that persists correspondence edits with optimistic concurrency.
status: draft
owner: Technical Writer
last_reviewed: 2026-07-31
library: SAIF.Business.Policy.Correspondence
reference_type: package
---

# SQL-016: Update correspondence or endorsement row

This update statement writes correspondence changes back to `ENDORSEMENT` only when the stored `UPDATE_DATE` still matches the caller-supplied original value, giving the library optimistic concurrency protection.

## Classification

| Field | Value |
| --- | --- |
| **SQL ID** | SQL-016 |
| **Operation type** | Update |
| **Execution method** | Inline SQL |
| **Database** | Oracle |
| **Schema** | [unqualified]** |
| **Command type** | Text |
| **Business object** | `clsCorrespondence` |
| **Criteria property** | `UpdateSQL` |
| **Lifecycle method** | `BeforeUpdate` / `AfterUpdate` |

## Parameters

| Parameter | Direction | Type | Max length | Description |
| --- | --- | --- | --- | --- |
| :LastUpdateDate | Input | `clsSmartDate` (DATE) | — | Optimistic-concurrency token representing the pre-change update date. |
| :PolicyNumber | Input | Decimal (NUMBER) | — | Policy number. |
| :PolicyPeriodEffectiveDate | Input | `clsSmartDate` (DATE) | — | Policy-period effective date. |
| :CorrespondenceSequenceNumber | Input | Decimal (NUMBER) | — | Correspondence sequence number. |
| :EffectiveDate | Input | Date (DATE) | — | Correspondence effective date. |
| :ExpirationDate | Input | `clsSmartDate` (DATE) | — | Optional expiration date. |
| :CorrespondenceDate | Input | Date (DATE) | — | Correspondence date. |
| :PrintedDate | Input | `clsSmartDate` (DATE) | — | Optional printed date. |
| :CorrespondenceCode | Input | String (VARCHAR2) | 5 | Correspondence code. |
| :NewValue | Input | `clsSmartString` (VARCHAR2) | 65 | New value text. |
| :OldValue | Input | `clsSmartString` (VARCHAR2) | 65 | Prior value text. |
| :CreateUser | Input | String (VARCHAR2) | 30 | Create-user value preserved during update. |
| :CreateDate | Input | Date (DATE) | — | Create-date value preserved during update. |
| :HoldPrintFlag | Input | `clsSmartString` (VARCHAR2) | 1 | Hold-print indicator. |
| :CorrespondenceJobID | Input | `clsSmartDecimal` (NUMBER) | — | Print job identifier. |
| :UpdateUser | Input | `clsSmartString` (VARCHAR2) | 30 | New update-user value. |
| :UpdateDate | Input | `clsSmartDate` (DATE) | — | New update-date value. |
| :VersionCode | Input | `clsSmartString` (VARCHAR2) | 8 | Document version code. |
| :NCCIEndorsementCode | Input | `clsSmartString` (VARCHAR2) | 5 | Printed NCCI endorsement code. |
| :CancelEndorseSequenceNumber | Input | `clsSmartDecimal` (NUMBER) | — | Cancelled endorsement sequence number. |

## Tables

| Table | Access | Columns used |
| --- | --- | --- |
| [ENDORSEMENT](../database-tables.md#endorsement) | UPDATE | POLICY_NUM, POLICY_PERIOD_EFF_DATE, ENDORSE_SEQ_NUM, EFFECTIVE_DATE, EXPIRATION_DATE, ENDORSE_DATE, PRINTED_DATE, ENDORSE_CODE, NEW_VALUE, OLD_VALUE, CREATE_USER, CREATE_DATE, HOLD_PRINT_FLAG, CORR_JOBID, UPDATE_USER, UPDATE_DATE, VERSION_CODE, PRINTED_NCCI_CODE, CANCEL_ENDORSE_SEQ_NUM |

## Sample SQL

```sql
UPDATE ENDORSEMENT
SET
  POLICY_NUM = :PolicyNumber,
  POLICY_PERIOD_EFF_DATE = :PolicyPeriodEffectiveDate,
  ENDORSE_SEQ_NUM = :CorrespondenceSequenceNumber,
  EFFECTIVE_DATE = :EffectiveDate,
  EXPIRATION_DATE = :ExpirationDate,
  ENDORSE_DATE = :CorrespondenceDate,
  PRINTED_DATE = :PrintedDate,
  ENDORSE_CODE = :CorrespondenceCode,
  NEW_VALUE = :NewValue,
  OLD_VALUE = :OldValue,
  CREATE_USER = :CreateUser,
  CREATE_DATE = :CreateDate,
  HOLD_PRINT_FLAG = :HoldPrintFlag,
  CORR_JOBID = :CorrespondenceJobID,
  UPDATE_USER = :UpdateUser,
  UPDATE_DATE = :UpdateDate,
  VERSION_CODE = :VersionCode,
  PRINTED_NCCI_CODE = :NCCIEndorsementCode,
  CANCEL_ENDORSE_SEQ_NUM = :CancelEndorseSequenceNumber
WHERE ENDORSE_SEQ_NUM = :CorrespondenceSequenceNumber
  AND (UPDATE_DATE = :LastUpdateDate
    OR (UPDATE_DATE IS NULL AND :LastUpdateDate IS NULL))
```

## Operations and processes
- [Persist a correspondence or endorsement](../operations/persist-a-correspondence-or-endorsement.md)

## Business rules
- [BR-011: Collection save applies edits before framework persistence](../business-rules.md#br-011-collection-save-applies-edits-before-framework-persistence)
- [BR-012: Insert and update must affect exactly one row](../business-rules.md#br-012-insert-and-update-must-affect-exactly-one-row)
- [BR-013: Updates enforce optimistic concurrency by update date](../business-rules.md#br-013-updates-enforce-optimistic-concurrency-by-update-date)



> **Note:** Statements marked with * were inferred from code structure, naming conventions, or
> contextual evidence where direct confirmation was not available in source artifacts. Statements
> marked with ** could not be confirmed; treat as unknown until verified.

## Sources
- `Business\SAIF.Business.Policy.Correspondence\clsCorrespondence.vb`
