sql >> データベース >  >> RDS >> Oracle

フィールド値がNullの場合にOracleでテーブルを更新し、その更新が成功したかどうかを判断する

    テーブルの特定のフィールドまたはすべてのフィールドの値がnullの場合のみ更新する必要がある場合があります。それ以外の場合は、フィールドを更新する必要はありません。以下は、HR.Employeesテーブルに記述された同じ目的の手順の例です:CREATE OR REPLACE PROCEDURE HR.UpdateEmpIfNull(PN_EMPLOYEE_ID IN NUMBER、PV_FIRST_NAME IN VARCHAR2、PV_LAST_NAME IN VARCHAR2、PV_EMAIL IN VARCHAR2、PV_PHONE_NUMBER IN VARCHAR2、PD_HIRE_DATE VARCHAR2、PN_SALARY IN NUMBER、PV_Success OUT VARCHAR2)IS n_length NUMBER; n_length2 NUMBER; BEGIN SELECT LENGTH(FIRST_NAME || LAST_NAME || EMAIL || PHONE_NUMBER || HIRE_DATE || JOB_ID || SALARY)INTO n_length FROM HR.EMPLOYEES WHERE EMPLOYEE_ID =PN_EMPLOYEE_ID;更新HR.EMPLOYEESSETFIRST_NAME =DECODE(FIRST_NAME、NULL、PV_FIRST_NAME、FIRST_NAME)、LAST_NAME =DECODE(LAST_NAME、NULL、pv_LAST_NAME、LAST_NAME)、EMAIL =DECODE(EMAIL、NULL、pv_EMAIL、EMAIL)、PHONE_NUMBER =DECODE(PH NULL、pv_PHONE_NUMBER、PHONE_NUMBER)、HIRE_DATE =DECODE(HIRE_DATE、NULL、pD_HIRE_DATE、HIRE_DATE)、JOB_ID =DECODE(JOB_ID、NULL、pV_JOB_ID、JOB_ID)、SALARY =DECODE(SALARY、NULL、pN_SALARY、SALARY)WHERE / *以下のクエリを使用して更新が成功したかどうかを判断する場合、ここでsql%rowcountまたはsql%foundを使用して判断することはできません。これは、従業員IDが正しい場合は常に更新が成功したことを示しますが、nullフィールドがあるかどうかを判断する必要があるためです。値が更新されたかどうか*/SELECT LENGTH(FIRST_NAME || LAST_NAME || EMAIL || PHONE_NUMBER || HIRE_DATE || JOB_ID || SALARY)INTO n_length2 FROM HR.EMPLOYEES WHERE EMPLOYEE_ID =PN_EMPLOYEE_ID; IF n_length2> n_lengthTHEN---変更を保存します。専念; Pv_Success:='Y';その他のロールバック; pv_success:='N'; END IF; EXCEPTION WHEN OTHERS THEN Pv_Success:='N'; ROLLBACK; END; /
    1. Neo4jのインストール

    2. サブクエリを使用したOracleピボット

    3. Oracleクライアントとネットワークコンポーネントが見つかりませんでした

    4. SQL ServerでのCAST()のしくみ