Проверка имени столбца на ноль все еще выдает ошибку ноль - PullRequest
0 голосов
/ 31 мая 2019

Я хочу вставить значения в table.Итак, я написал следующий код для этого.

create or replace PROCEDURE NEIQC_DATA_DUMP_MST AS 
BEGIN

execute immediate 'truncate table TBL_NEIQC_WF_SITE_MST_NEW';

INSERT INTO TBL_NEIQC_WF_SITE_MST_NEW

(
    OBJECTID,
    SAP_ID,
    NETWORK_ENTITY_ID    ,
    SITE_NAME            ,
    SITE_ADDRESS         ,
    MAINTENANCEZONE_CODE ,
    INVENTORY_TYPE       ,
    TYPE_NAME            ,
    SITE_STATUS_CODE     , 
    NE_MODIFIED_DATE     ,
    NE_MODIFIED_BY       ,
    --SERVICE_CODE,
    CREATED_DATE         ,
    CREATED_BY           ,
    STRUCTURE_NAME       ,
    RJ_CITY_CODE         ,
    RJ_R4G_STATE_CODE    ,
    RJ_DISTRICT_CODE     ,
    RJ_TALUK_CODE        ,
    RJ_JC_CODE           ,
    RJ_JIOPOINT_SAPCODE  ,
    RJ_COMPANY_CODE_1    ,
    RJ_COMPANY_CODE_2    ,
    PLACEMENT_DATE,
    SITE_TYPE
)

SELECT

    OBJECTID                      ,
    RJ_SAPID ,
    RJ_NETWORK_ENTITY_ID          ,
    RJ_SITE_NAME                  ,
    RJ_SITE_ADDRESS               ,
    RJ_MAINTENANCE_ZONE_CODE      ,
    CASE when RJ_SAPID LIKE '%ENB%' THEN 'SITE' ELSE 'OTHERS' end as INVENTORY_TYPE, 
    TYPE_NAME                     ,
    4,
    RJ_LAST_MODIFIED_DATE,
    RJ_LAST_MODIFIED_BY ,
    --APP_FIBERINV.FUNC_SC(RJ_SAPID),
    SYSDATE,
    'SCHEDULER',
    STRUCTURE_NAME                ,
    RJ_CITY_CODE                  ,
    RJ_R4G_STATE_CODE             ,
    RJ_DISTRICT_CODE              ,
    RJ_TALUK_CODE                 ,
    RJ_JC_CODE                    ,
    RJ_JIOPOINT_SAPCODE           ,
    RJ_COMPANY_CODE_1             ,
    RJ_COMPANY_CODE_2          ,
    PLACEMENT_DATE,
    REGEXP_SUBSTR(TO_CHAR(RJ_SAPID),'[^-]+', 1, 4) AS SITE_TYPE

 from APP_FTTX.ne_structures WHERE RJ_SAPID IS NOT NULL OR RJ_SAPID <> 'NA' AND OBJECTID IS NOT NULL;



COMMIT; 

END NEIQC_DATA_DUMP_MST;

Но проблема в том, что даже после проверки условия null для OBJECTID я все еще получаю ошибку как

ORA-01400: невозможно вставить NULL в ("APP_FIBERINV". "TBL_NEIQC_WF_SITE_MST_NEW". "OBJECTID")

Пожалуйста, подскажите, что может быть здесь не так.

Ответы [ 2 ]

2 голосов
/ 31 мая 2019

Вероятно, до приоритет оператора ; AND имеет более высокий приоритет, чем OR. Итак, ваше состояние:

WHERE RJ_SAPID IS NOT NULL OR RJ_SAPID <> 'NA' AND OBJECTID IS NOT NULL

интерпретируется как

WHERE RJ_SAPID IS NOT NULL OR (RJ_SAPID <> 'NA' AND OBJECTID IS NOT NULL)

Если у вас есть исходная строка, в которой OBJECTID равен нулю, то она все равно пройдет, чем условие, и потерпит неудачу при вставке, если RJ_SAPID - это что угодно, кроме 'NA', в том числе, если это значение равно нулю.

Я верю, что вы хотите:

WHERE (RJ_SAPID IS NOT NULL OR RJ_SAPID <> 'NA') AND OBJECTID IS NOT NULL

поэтому вам нужно включить эти скобки в ваше утверждение.

1 голос
/ 31 мая 2019

Я думаю, что ваше состояние должно быть улучшено. добавьте '()' вокруг вашего или условия

WHERE (RJ_SAPID IS NOT NULL OR RJ_SAPID <> 'NA') AND OBJECTID IS NOT NULL;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...