имеют 2 таблицы. Prod и dev. мое требование: мне нужно сравнить данные dev с prod, и если значение столбца равно нулю, мне нужно обновить его как «NULL» как строку.
таблицы содержат 1000 строк данных.
Да, они одинаковыструктура, так как я буду создавать таблицы TEMP A с
(REVISIONCODE NOT NULL VARCHAR2(60)
KEY_1 NOT NULL VARCHAR2(60) ,ATTRIBUTE_CATEGORY VARCHAR2(60)
ATTRIBUTE_INDEX VARCHAR2(60)
ATTRIBUTE_STATE VARCHAR2(60) ).
A will be compared with B
(REVISIONCODE NOT NULL VARCHAR2(60)
KEY_1 NOT NULL VARCHAR2(60) ,ATTRIBUTE_CATEGORY VARCHAR2(60)
ATTRIBUTE_INDEX VARCHAR2(60)
ATTRIBUTE_STATE VARCHAR2(60) ).
Here Data A(DEV) is having as
REVISIONCODE KEY_1 Category Index
IN_PROD 360View store
IN_PROD Alternate display name Index
IN_PROD Book product store
Data for B(PROD) is
REVISIONCODE KEY_1 Category Index
IN_PROD 360View Store
IN_PROD Alternate display name null Index
IN_PROD Book product Store
здесь, когда я смотрю данные чужой таблицы B столбец key_1 Альтернативный столбец категории отображаемого имени содержит данные как «ноль», где в том же столбце данные пусты.
для этой строки мне нужно обновить данные таблицы A строки для категории столбца как «ноль». и еще одна вещь в таблице A для key_1. Значение столбца категории 360_view в таблице B пустое, а также значение пустое, поэтому мне не нужно об этом думать.
, поскольку вы можете помочь мне эффективным способом написать
Мне нужно сравнить 12 столбцов в таблице.
для этого я написал код как
DECLARE
CURSOR C1 is select * FROM PROD ;
CURSOR C2 IS select * FROM DEV ;
TYPE t_stg_tab IS TABLE OF C1%ROWTYPE;
c1_var t_stg_tab ;
TYPE t_non_prod_tab IS TABLE OF C2%ROWTYPE;
c2_var t_non_prod_tab ;
v_prod_upd_cntr PLS_INTEGER := 0;
l_rec_cnt NUMBER := 0;
start_date DATE := sysdate;
BEGIN
OPEN c1;
FETCH c1 BULK COLLECT INTO c1_var ;
OPEN c2;
FETCH c2 BULK COLLECT INTO c2_var ;
FOR I IN 1..C1_VAR.COUNT LOOP
FOR J IN 1..C2_VAR.COUNT LOOP
IF c2_var(j).revisioncode =c1_var(i).revisioncode and c2_var(j).key_1 = c1_var(i).key_1 then
dbms_output.put_line('c1_var(i).attribute_category'||c1_var(i).attribute_category||'c1_var(i).revisioncode'||c1_var(i).revisioncode||'c2_var(j).key_1'||c2_var(j).key_1);
dbms_output.put_line('c2_var(j).attribute_category'||c2_var(j).attribute_category||'c2_var(j).revisioncode'||c2_var(j).revisioncode||'c2_var(j).key_1'||c2_var(j).key_1);
IF c1_var(i).attribute_category is not null then
IF c1_var(i).attribute_category = 'null' and c2_var(j).attribute_category is null then
dbms_output.put_line('c2_var(j).attribute_category_empty_need_update'||c2_var(j).attribute_category);
-- UPDATE P_MD_CE05_ATR_RVSNCD_KEY_TST set attribute_category = 'null' where revisioncode = c2_var(j).revisioncode and key_1 = c2_var(j).key_1 ;
l_update_attribute_category := 'null';
ELSE
dbms_output.put_line('c2_var(j).attribute_category_No update'||c2_var(j).attribute_category);
END IF;
END IF;
END IF;
UPDATE P_MD_CE05_ATR_RVSNCD_KEY_TST set attribute_category = l_update_attribute_category ;
l_rec_cnt := SQL%ROWCOUNT;
v_prod_upd_cntr := v_prod_upd_cntr + l_rec_cnt;
DBMS_OUTPUT.PUT_LINE('NON_PROD_DATA: ' || v_prod_upd_cntr || ' records: starting @ ' || sysdate);
DBMS_APPLICATION_INFO.SET_CLIENT_INFO(start_date||'-up2-'|| v_prod_upd_cntr ||'-'|| sysdate);
END LOOP;
DBMS_OUTPUT.PUT_LINE('after first end loop rowcount_value'||i);
DBMS_OUTPUT.PUT_LINE('NON_PROD_DATA: ' || v_prod_upd_cntr || ' records: starting @ ' || sysdate);
DBMS_APPLICATION_INFO.SET_CLIENT_INFO(start_date||'-up2-'|| v_prod_upd_cntr ||'-'|| sysdate);
END LOOP;
DBMS_OUTPUT.PUT_LINE('NON_PROD_DATA: ' || v_prod_upd_cntr || ' records: starting @ ' || sysdate);
DBMS_APPLICATION_INFO.SET_CLIENT_INFO(start_date||'-up2-'|| v_prod_upd_cntr ||'-'|| sysdate);
-- DBMS_OUTPUT.PUT_LINE('at end rowcount_value1'||i||'rowcount2'||j);
Exception
when others then
dbms_output.put_Line('SQLCODE'||SQLCODE||' -ERROR- '||SQLERRM) ;
END;
Когда я выполняю БД, не отвечающую. Мне нужно отменить операцию.