2013-04-02 2 views
0
Declare 
v_cnt varchar2(20); 
v_cnd varchar2(20); 
v_total varchar2(20); 

begin 

select count(emp_id) into v_cnt from emp1; 
select count(emp_id) into v_cnd from emp2; 
v_total:=v_cnt+v_cnd; 

dbms_output.put_line('before'); 
dbms_output.put_line(v_total); 

update emp3 set total_emp=v_total where dept_no=40; 
commit; 

dbms_output.put_line('after'); 
dbms_output.put_line(v_total); 

end; 

위 프로그램에서 total_emp 열 값은 숫자 값 대신 0으로 업데이트됩니다. 그러나 dbms_output 문을 사용하여 값을 인쇄 할 때 앞과 뒤 두 경우에 대해 변수 v_total의 숫자 값이 나타납니다.PL/SQL - 열 값이 숫자 값 대신 0으로 업데이트됩니다.

v_total 값이 표의 열 값으로 업데이트되지 않습니다.

total_emp에 대한 테이블 열 정의는 varchar2 (20)입니다.

또한 위의 명령문에서 total_emp 열의 값을 하드 코드하여 처리했습니다.

그래서 문제는 업데이트 문에서 사용될 때 변수 값으로 업데이트되지 않습니다.

도와주세요.

+2

"total_emp는 varchar2 (20) *"입니다. 아야!!! *** NOT *** *** 문자 열에 숫자를 저장하십시오. 못. 이제까지. –

+0

0으로 업데이트 되었습니까? 아니면 이미 0이었고 예상 값으로 업데이트되지 않았습니까? 'dept_no = 40'을 사용하여'emp3'에 실제로 행이 있습니까? 하드 코딩 된 값 버전을위한 where 절이 있습니까? –

답변

1

선언 한 변수는 VARCHAR2 대신 NUMBER 유형이어야합니다. 계산에 사용하려는 변수입니다. 또한 발생할 수있는 오류를보고하기 위해 예외 처리기를 추가하는 것이 좋습니다. 또한 업데이트로 인해 영향을받는 행 수를 표시하는 것이 좋습니다. 코드를 다음과 같이 다시 쓸 수 있습니다.

Declare 
    v_cnt NUMBER; 
    v_cnd NUMBER; 
    v_total NUMBER; 
begin 
    select count(emp_id) 
    into v_cnt 
    from emp1; 

    select count(emp_id) 
    into v_cnd 
    from emp2; 

    v_total:=v_cnt+v_cnd; 

    dbms_output.put_line('before'); 
    dbms_output.put_line(v_total); 

    update emp3 
    set total_emp=v_total 
    where dept_no=40; 

    DBMS_OUTPUT.PUT_LINE('Number of rows updated=' || SQL%ROWCOUNT); 

    commit; 

    dbms_output.put_line('after'); 
    dbms_output.put_line(v_total); 
EXCEPTION 
    WHEN OTHERS THEN 
    DBMS_OUTPUT.PUT_LINE('Exception: ' || SQLCODE || ' ' || SQLERRM); 
    ROLLBACK; 
end; 

공유하고 즐기십시오.

관련 문제