2013-08-07

테이블 칼럼의 데이터 타입 변경 (ORA-06502 PL/SQL 수치 또는 값 오류)

ORA-06502 PL/SQL 수치 또는 값 오류 라고 뜨면

변수에 담을 값이 변수의 크기보다 커서 발생하는 문제로 관련 테이블 칼럼 데이터 타입을 늘려준다.


ALTER TABLE SMP_RESULT_EVENT MODIFY(EVENT_NO VARCHAR2(20));
ALTER TABLE 테이블명 MODIFY(칼럼명 데이터타입);

프로시저 DBMS_OUTPUT에서 찍어보는 방법

DECLARE
    V_SEQ_NM    VARCHAR2(200);
    V_EVENT_NO  VARCHAR2(200);

BEGIN
    V_SEQ_NM    := NULL;

    SRIMS_AD_20130807.SP_GET_EVENT_NO( 'SQ_SMP_RESULT_EVENT', V_EVENT_NO);
    DBMS_OUTPUT.PUT_LINE('V_SEQ_NM    = ' || V_SEQ_NM );
    DBMS_OUTPUT.PUT_LINE('V_EVENT_NO  = ' || V_EVENT_NO );


    COMMIT;
END;



/*------------------------------------------------------------------------------
-- Object Name: SRIMS_AD_20130807.SP_GET_EVENT_NO
-- Creation Date : 2013-08-07 오후 5:54:14
-- Last Modified : 2013-08-08 오전 9:23:30
-- Status : VALID
------------------------------------------------------------------------------*/
CREATE OR REPLACE PROCEDURE SRIMS_AD_20130807.SP_GET_EVENT_NO
(
    V_SEQ_NM    IN   VARCHAR2,
    V_EVENT_NO    OUT   VARCHAR2
)
IS
    V_SQL         VARCHAR2(32767);
    V_CUR_DATE6   VARCHAR2(6);
    N_CNT          NUMBER;
BEGIN
    --DBMS_OUTPUT.ENABLE;
    V_CUR_DATE6  := TO_CHAR(SYSDATE, 'YYYYMM');
    SELECT COUNT(*) INTO N_CNT
    FROM EVENT_NO_MSG;
    IF N_CNT > 0 THEN
        UPDATE EVENT_NO_MSG
           SET CRT_YM_B = V_CUR_DATE6;
    ELSE
        INSERT INTO EVENT_NO_MSG (CRT_YM_B)
        VALUES (V_CUR_DATE6);
    END IF;
    SELECT COUNT(*) INTO N_CNT
    FROM USER_OBJECTS
    WHERE OBJECT_NAME = V_SEQ_NM
    AND OBJECT_TYPE = 'SEQUENCE';
    IF N_CNT = 0 THEN
        V_SQL := 'CREATE SEQUENCE ' || V_SEQ_NM || ' INCREMENT BY 1 START WITH 1 NOCYCLE NOCACHE';
        EXECUTE IMMEDIATE V_SQL;
        UPDATE EVENT_NO_MSG
        SET CRT_YM_A = V_CUR_DATE6;
    ELSE
        SELECT COUNT(*) INTO N_CNT
        FROM EVENT_NO_MSG
        WHERE CRT_YM_B <> CRT_YM_A;
        IF N_CNT > 0 THEN
            V_SQL := 'DROP SEQUENCE ' || V_SEQ_NM;
            EXECUTE IMMEDIATE V_SQL;
            UPDATE EVENT_NO_MSG
               SET CRT_YM_A = V_CUR_DATE6;
            V_SQL := 'CREATE SEQUENCE ' || V_SEQ_NM || ' INCREMENT BY 1 START WITH 1';
            EXECUTE IMMEDIATE V_SQL;
        END IF;
    END IF;
    V_SQL := ' SELECT ''' || V_CUR_DATE6 || ''' || LPAD(TO_CHAR(' || V_SEQ_NM || '.NEXTVAL), 7, ''0'') AS EVENT_NO FROM DUAL';
    DBMS_OUTPUT.PUT_LINE('V_SQL  = ' || V_SQL );
    EXECUTE IMMEDIATE V_SQL INTO V_EVENT_NO;
    RETURN;
END;

체크박스 체크하고 데이터 못 바꾸게 하는 거

 <input type="checkbox" id="chkSMS" disabled runat="server" checked style="width:20px" />