2013-12-19 2 views
0

Мне нужно написать хранимую процедуру для нижеописанного требования.вставка plsql, обновление для существующего идентификатора

Желаемый результат: НАЛОГОВАЯ таблица

CATEGORY_ID TAX_PERCENTAGE FROM_DATE CREATE_DATE    TAX_ID TO_DATE 
-------------------------------------------------------------------------------------  
1   10    4/1/2012 12/19/2013 8:54:20 PM 61  31-MAR-13 
1   12.5   4/1/2013 12/19/2013 8:54:44 PM 62  31-dec-9998 

Когда новый CATEGORY_ID скажем, 1 с tax_percentage 10 для бизнес-год (FROM_DATE) 4/1/2012 вставляется, то значение по умолчанию должно быть помещено в to_date колонке сказать 31-дец-9998. Когда я пытаюсь ввести тот же cat_id 1 с diff набором значений, скажем tax_percentage 12.5, на этот раз from_date 4/1/2013, тогда значение to_date должно быть (from_date-1) cat_id 1, tax_percent 10 и my to_date значение 10, cat_id = 1 должны быть обновлено с датой по умолчанию 31-декабрь-9998.something как этого

CREATE OR REPLACE procedure SCOTT.Sp_SaveNewTaxPercentage 
(
    iv_category_id number, 
    iv_tax_percentage varchar2, 
    iv_from_date varchar2, 
    iv_to_date varchar2 default '12/31/9998' , 
    iv_created_date date, 
    ov_err_code out nocopy varchar2, 
    ov_err_msg out nocopy varchar2 
) 
is 
    lv_category_id varchar2(25); 
    LV_TO_DATE varchar2(25); 
    lv_cat_id varchar2(12); 

begin 
    ov_err_code:=0; 

    for J in (SELECT CATEGORY_ID,FROM_DATE FROM TAX_P WHERE CATEGORY_ID =IV_CATEGORY_ID) 
    loop 

     SELECT to_date(iv_from_date,'dd/mm/yyyy') -1 INTO LV_TO_DATE FROM DUAL; 
     lv_cat_id := J.CATEGORY_ID; 

    end loop; 

    update tax_p set TO_DATE=LV_TO_DATE where CATEGORY_ID =lv_cat_id; 

    commit; 

    IF lv_cat_id IS NULL THEN 

     LV_TO_DATE := iv_to_Date; 
    END IF; 

    insert into tax_p(TAX_ID , CATEGORY_ID ,TAX_PERCENTAGE, FROM_DATE ,TO_DATE,CREATE_DATE) 
    values(tax_seq.nextval,iv_category_id,iv_tax_percentage,iv_from_date,LV_TO_DATE,sysdate); 

    select 'Successfully Saved' into ov_err_msg from dual; 

    commit; 
Exception 
when others then 
    rollback; 
    ov_err_code:=1; 
    ov_err_msg:='Error while saving'||SQLERRM; 
end Sp_SaveNewTaxPercentage; 
/

show errors; 
+0

Итак, в чем вопрос? –

+0

Я хочу обновить столбец TO_DATE col 2, т. Е. CATEGORY_ID 1 TAX_PERCENTAGE 12.5 со значением даты по умолчанию, в то же время я хочу изменить столбец to_date col 1, т.е. CATEGORY_ID 1 TAX_PERCENTAGE 10 с col2 from_date -1 – user3099684

+0

любая помощь по этому вопросу оценили – user3099684

ответ

0

Я думаю, что вам не нужно записи цикла обновить to_date поля, только один UPDATE заявления будет работать для вас.

BEGIN 
    UPDATE tax_p 
    SET to_date = to_date(iv_from_date,'dd/mm/yyyy') -1 
    WHERE category_id = iv_category_id; 

    INSERT INTO tax_p(tax_id, category_id, tax_percentage, from_date, to_date, create_date) 
      VALUES(tax_seq.nextval, iv_category_id, iv_tax_percentage, iv_from_date, iv_to_date, SYSDATE); 

    COMMIT; 
EXCEPTION WHEN ... 
    ... 
END; 
Смежные вопросы