sql >> Database >  >> RDS >> Oracle

Oracle 11g - Vind records in een CLOB met Carriage Return Line Feed

Het blijkt een geval van slechte data te zijn. De gegevens in mijn testdatabase waren beschadigd en hadden alleen LF's in plaats van CRLF's.

GIGO :-)

Bedankt voor al je hulp

Oh en trouwens. In mijn codevoorbeeld ging ik met de INSTR-functie in plaats van de like-functie. Als de gebruiker een % in de tekst heeft ingevoerd om door te zoeken, kan dat de like-statement hebben verpest. (Kan die er niet uit filteren omdat % mogelijk een geldig teken in mijn gegevens is)

Hier is de definitieve code:

PROCEDURE FindReplaceResponsibilities (
iOldResponsibilities    IN  JP_JOB_FAMILIES.RESPONSIBILITIES%TYPE,
iNewResponsibilities    IN  JP_JOB_FAMILIES.RESPONSIBILITIES%TYPE,
oNumRowsUpdated         OUT INTEGER

)IS

BEGINoNumRowsBijgewerkt :=0;

    SAVEPOINT sp_jf_findrepresp;

    -- If there is no old text to search for then, 
    -- append the new text to the end of every row.
    -- Else replace all occurrences of the old text with the new text
    IF iOldResponsibilities IS NULL THEN
      UPDATE JP_JOB_FAMILIES
        SET RESPONSIBILITIES = RESPONSIBILITIES || iNewResponsibilities;

      oNumRowsUpdated := SQL%ROWCOUNT;

    ELSE
      UPDATE JP_JOB_FAMILIES
        SET RESPONSIBILITIES = REPLACE(RESPONSIBILITIES, iOldResponsibilities, iNewResponsibilities)
      WHERE dbms_lob.instr(RESPONSIBILITIES, iOldResponsibilities) > 0; 

      oNumRowsUpdated := SQL%ROWCOUNT;

    END IF;

    RETURN;

    EXCEPTION

        WHEN OTHERS THEN
            BEGIN
                oNumRowsUpdated := -1;
                ROLLBACK TO sp_jf_findrepresp;
                dbms_output.put_line('error: ' || sqlerrm);
                RETURN;
            END;

EINDE FindReplaceVerantwoordelijkheden;

De code van mijn applicatie was in orde:

public int FindReplaceJobFamilyResponsibilities(String oldResponsibilities, String newResponsibilities, IDbTransaction transaction = null)
{
    using (IDbCommand cmd = this._dataHelper.GetStoredProcedure(_connectionString,
        "JP_JOBFAM_PKG.FindReplaceResponsibilities", true))
    {
        _dataHelper.SetParameterValue(cmd, "iOldResponsibilities", oldResponsibilities);
        _dataHelper.SetParameterValue(cmd, "iNewResponsibilities", newResponsibilities);
        DataHelperBase.VerifyParameters(cmd.Parameters, false);
        base.SetExecuteConnection(cmd, transaction);
        _dataHelper.ExecuteNonQuery(cmd);

        return Convert.ToInt32(_dataHelper.GetParameterValue(cmd, "oNumRowsUpdated"));
    }
}



  1. Verleen privileges voor een bepaalde database in PostgreSQL

  2. Hoe een aantal specifieke rijen uit een andere tabel in een subquery te krijgen

  3. Gematerialiseerde weergave met trigger?

  4. Twee tabellen samenvoegen in de JPA-repository