• 카테고리

    질문 & 답변
  • 세부 분야

    웹 개발

  • 해결 여부

    미해결

11강 프로시저 질문있습니다!!

20.07.14 15:44 작성 조회수 164

1

sql developer에서

패키지 만드는 중

WEB_MAIN------------------------

create or replace PACKAGE web_main AS

PROCEDURE selectLogin

(

    In_userId IN VARCHAR2,

    ref_cursor OUT SYS_REFCURSOR

);

PROCEDURE insertBorder

        (

            In_userId IN VARCHAR2,

            In_userIp IN VARCHAR2,

            In_title IN VARCHAR2,

            In_mytextarea IN VARCHAR2

        );

PROCEDURE selectBorder

        (

           ref_cursor OUT SYS_REFCURSOR

        );

        

PROCEDURE selectBorderView

        (

           In_borderId IN NUMBER,

           ref_cursor OUT SYS_REFCURSOR

        );

PROCEDURE insertBorderReply

        (

            In_originalId IN NUMBER,

            In_userId IN VARCHAR2,

            In_userIp IN VARCHAR2,

            In_title IN VARCHAR2,

            In_mytextarea IN VARCHAR2

        );

END web_main;

----------------------------------------------------

위와 같이 작성되었고

WEB_MAIN Body는

create or replace PACKAGE BODY WEB_MAIN AS

  PROCEDURE selectLogin

(

    In_userId IN VARCHAR2,

    ref_cursor OUT SYS_REFCURSOR

) IS

  BEGIN

  

    OPEN ref_cursor FOR

        SELECT

        USER_ID AS USER_ID

        FROM EGOV_USER

        where USER_ID=In_userId;

        

    EXCEPTION WHEN OTHERS THEN

        DBMS_OUTPUT.PUT_LINE('오류발생');

        DBMS_OUTPUT.PUT_LINE('에러내용:'||SQLERRM);

        DBMS_OUTPUT.PUT_LINE('발생위치:'||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);

    

    

  END selectLogin;

PROCEDURE insertBorder

  (

        In_userId IN VARCHAR2,

        In_userIp IN VARCHAR2,

        In_title IN VARCHAR2,

        In_mytextarea IN VARCHAR2

  ) IS

  BEGIN

        

        INSERT INTO EGOV_BBS 

        (

        borderid,

        bordertype,

        group_num,

        parentid,

        group_order,

        group_tab,

        userid,

        nickname,

        writerip,

        editid,

        editip,

        title,

        bordertext,

        seecount,

        filename,

        filetype,

        fileurl,

        replycount

        )

        VALUES

        (

        borderid_seq.nextval,

        '0',

        borderid_seq.currval,

        0,

        0,

        0,

        In_userId,

        In_userId,

        In_userIp,

        '',

        '',

        In_title,

        In_mytextarea,

        0,

        '',

        '',

        '',

        0

        );

        

        COMMIT;

    

       EXCEPTION WHEN OTHERS THEN

         DBMS_OUTPUT.PUT_LINE('오류발생');

         DBMS_OUTPUT.PUT_LINE('에러내용:'||SQLERRM);

         DBMS_OUTPUT.PUT_LINE('발생위치:'||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);

  end insertBorder;

  

  

  

  PROCEDURE selectBorder

  (

    ref_cursor OUT SYS_REFCURSOR

    

  ) IS

  BEGIN

  

    OPEN ref_cursor FOR

        SELECT

        borderid,

        group_tab,

        nickname,

        writeday,

        title,

        seecount

        FROM EGOV_BBS

        ORDER BY GROUP_NUM DESC,GROUP_ORDER ASC;

        

    EXCEPTION WHEN OTHERS THEN

        DBMS_OUTPUT.PUT_LINE('오류발생');

        DBMS_OUTPUT.PUT_LINE('에러내용:'||SQLERRM);

        DBMS_OUTPUT.PUT_LINE('발생위치:'||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);

  

  END selectBorder;

  

  PROCEDURE selectBorderView

  (

    In_borderId IN NUMBER,

    ref_cursor OUT SYS_REFCURSOR

    

  ) IS

  BEGIN

  

    OPEN ref_cursor FOR

        SELECT

        borderid,

        nickname,

        title,

        bordertext

        FROM EGOV_BBS

        WHERE BORDERID=In_borderId;

        

    EXCEPTION WHEN OTHERS THEN

        DBMS_OUTPUT.PUT_LINE('오류발생');

        DBMS_OUTPUT.PUT_LINE('에러내용:'||SQLERRM);

        DBMS_OUTPUT.PUT_LINE('발생위치:'||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);

  

  END selectBorderView;

  

  PROCEDURE insertBorderReply

  (

        In_originalId IN VARCHAR2,

        In_userId IN VARCHAR2,

        In_userIp IN VARCHAR2,

        In_title IN VARCHAR2,

        In_mytextarea IN VARCHAR2

  ) IS

    lo_group_num NUMBER(10,0);

    lo_group_order NUMBER(10,0);

    lo_group_tab NUMBER(10,0);

  BEGIN

        

        /*답글달고자하는 글의 데이터를 로컬변수에 저장.*/

        SELECT 

        group_num,

        group_order,

        group_tab

        INTO

        lo_group_num,

        lo_group_order,

        lo_group_tab

        FROM EGOV_BBS

        WHERE borderid = In_originalId;

        

        /*기존글 형식을 맞추기위해 업데이트*/

        UPDATE EGOV_BBS 

        set group_order = group_order + 1 

        WHERE group_num = lo_group_num

        AND group_order > lo_group_order;

        

        IF(lo_group_order = 0) 

        THEN

            SELECT

            MAX(group_order)

            INTO

            lo_group_order

            FROM EGOV_BBS

            WHERE group_num = lo_group_num;

        END IF;

        

        /*답글달고자하는 글의 데이터를 로컬변수에 저장.*/

        INSERT INTO EGOV_BBS 

        (

        borderid,

        bordertype,

        group_num,

        parentid,

        group_order,

        group_tab,

        userid,

        nickname,

        writerip,

        editid,

        editip,

        title,

        bordertext,

        seecount,

        filename,

        filetype,

        fileurl,

        replycount

        )

        VALUES

        (

        borderid_seq.nextval,

        '0',

        lo_group_num,

        In_originalId,

        lo_group_order+1,

        lo_group_tab+1,

        In_userId,

        In_userId,

        In_userIp,

        '',

        '',

        In_title,

        In_mytextarea,

        0,

        '',

        '',

        '',

        0

        );

        

        COMMIT;

        

       EXCEPTION WHEN OTHERS THEN

         DBMS_OUTPUT.PUT_LINE('오류발생');

         DBMS_OUTPUT.PUT_LINE('에러내용:'||SQLERRM);

         DBMS_OUTPUT.PUT_LINE('발생위치:'||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);

                

  END insertBorderReply;

  

  END WEB_MAIN;

---------------------------------위와 같이 작성되었는데,

답변 1

답변을 작성해보세요.

0

안녕하세요 답변입니다.

 

선언쪽:

PROCEDURE insertBorderReply(

In_originalId IN NUMBER,

본문쪽:

PROCEDURE insertBorderReply(

In_originalId IN VARCHAR2,

 

In_originalId의 타입이 일치하지 않아서 생기는 오류입니다.

아마 해당 웹페이지도 프로시저 오류로 동작을 안할 것으로 보입니다.

In_originalId의 타입을 하나로 통일시켜주시면 해결 될 것 같습니다.

감사합니다.