실습 1

/********************

EX21Jdbc.Callable 패키지 -> FunctionCall 클래스에서 사용


JDBC실습을 위한 파일

    : 해당 파일은 KOSMO계정에 연결하여 작성합니다.

********************/


/*

함수생성

    : 매개변수로 문자열을 받으면 첫문자를 제외한 나머지 부분을

    *로 변환하여 변환하는 함수를 작성하시오.

    예) john -> j***

*/

create or replace function setAsterik (str in varchar2)

    return varchar2

    

is

begin

    /*

        morning -> m******

        

        rpad(기준컬럼(문자열), 길이, 채울문자);

    */

    return rpad(substr(str, 1,1), length(str), '*');


end;

/


select SetAsterik('morning') from dual;


/*

EX21Jdbc.callable -> InsertProCall.java

예시] member테이블에 새로운 레코드를 입력하는 프로시저 생성

*/


create or replace procedure kosmoinsertMember

    (

        p_id in varchar2,

        p_pass in member.pass%type,

        p_name in member.name%type,

        returnVal out number

    )

is

    --변수가 없는 경우 생략가능


begin

    /*

        insert가 성공하면 입력된 행의 갯수를 반환한다.

        만약 실패하면 0을 반환한다.

    */

    insert into member (id, name, pass)

    values (p_id, p_pass, p_name);

    

    if SQL%found then --적용된 행이 있으면 true 아니면 false

        returnVal := SQL%rowcount;

        commit;

    else

        returnVal := 0;

    end if;

end;

/


--데이터사전

select * from user_source where name like upper('%kosmo%');


--바인드변수 생성 : 프로시저 실행 후 반환받은 값을 확인하기 위해 생성

variable row_count number;


--프로시저 실행

execute KosmoInsertMember('hong2', '2222', '나이번', :row_count);


--리턴값 확인하기

print row_count;


--member 테이블 레코드 확인하기

select * from member;


/*

Ex21Jdbc.callable -> DeleteProcCall.java

예시] member테이블에 새로운 레코드를 삭제하는 프로시저 생성


매개변수 : in member_id ->아이디 입력, out returnVal -> 성공/실패 반환

반환값 :

    삭제성공시 -> "SUCCESS"반환

    삭제실패시 -> "FAIL" 반환

*/


create or replace procedure KosmoDeleteMember 

    (

        member_id in member.id%type,

        returnVal out varchar2

    )

is

    --변수생략

begin

    --레코드 삭제

    delete from member where id = member_id;

    -- delete를 실행 후 영향을 받은 레코드(row)가 있는지 확인

    if sql%found then

        returnVal := 'SUCCESS';

        --delete가 성공했다면 실제 테이블에 적용하기 위해 commit 해야함.

        commit;

    else

        returnVal := 'FAIL';

    

    end if;

    

    --예외처리

    exception

    when others then

    begin

        --예외가 발생한 경우에도 '실패' 반환함

        returnVal := 'FAIL';

    end;

end;

/


-- 리턴값 확인위한 바인드변수 생성 : SUCCESS or FAIL 이라는 문자열이 반환되므로

--                                    문자타입으로 설정

variable r_val varchar2(10);

-- 프로시저 실행

execute KosmoDeleteMember('hong3', :r_val);


-- 반환값 확인

print r_val;


-- 레코드 확인

select * from member;


/*

Ex21Jdbc.callable -> UpdateProCall.java

예시] member테이블의 레코드를 수정하는 프로시저를 작성하시오.

수정할 아이디와 이름, 패스워드를 입력받는다.

매개변수 :

    in m_id, m_pass, m_name

    out returnVal

변환값 :

    수정성공시 -> 적용된 행의 갯수 반환

    수정실패시 -> 0 반환

프로시저명 : KosmoUpdateMember

*/


create or replace procedure KosmoUpdateMember 

    (

        m_id in varchar2,

        m_pass in member.pass%type,

        m_name in member.name%type,

        returnVal out number

    )

is

    --변수생략

begin

    update member set name = m_name, pass = m_pass where id = m_id;


    if SQL%Found then

        returnVal := SQL%RowCount;

        commit;

    else

        returnVal := 0;

    end if;

end;

/


/*

풀이

create or replace procedure KosmoUpdateMember(

                m_id in member.id%type

                m_pass in member.pass%type,

                m_name in member.name%type,

                returnVal out number

        )

is

begin

    update member

    set

        name=m_name,

        pass=m_pass

    where

        id = m_id;

    if SQL%Found then

        returnVal := SQL%RowCount;

        commit;

    else

        returnVal :== 0;

    end if;

end;

/


*/


/*

Ex21Jdbc.callable -> IsMemberProcCall.java

예시] 아이디와 패스워드를 매개변수로 전달받아서 회원인지 여부를

판단하는 프로시저를 작성하시오. (해당 프로시저는 웹 프로그램에서 회원인증을

위해 활용될 수 있다.)


매개변수 :

    in user_id, user_pass

    out returnVal

    

반환값 :

    0: 회원인증실패

    1: 아이디는 일치하나 패스워드가 틀린 경우

    2: 아이디/패스워드 모두 일치하여 회원인증 성공

프로시저명 : Kosmo_Member_Auth

*/


create or replace procedure Kosmo_Member_Auth (

            user_id in varchar2,

            user_pass in varchar2,

            returnVal out number

    

        )

is

    --회원인증 여부를 판단하기 위한 변수 생성

    temp_count number := 0;

begin

    select count(*) into temp_count

    from member 

    where id = user_id;

    

    --회원아이디가 있는 경우

    if temp_count=1 then

    

        --회원아이디, 패스워드 2개의 조건으로 재검증

        select count(*) into temp_count

        from member

        where id = user_id and pass=user_pass;

        

        if temp_count = 1 then

            --아이디와 패스워드 모두 일치

            returnVal := 2;

        else

            --아이디만 일치, 패스워드는 틀림

            returnVal := 1;

        end if;

    else

        --회원아이디가 없는경우

        returnVal := 0;

    end if;

end;

/

variable return_val number;

execute Kosmo_member_Auth('hong1','1111', :return_val);

print return_val;


variable return_val number;

execute Kosmo_member_Auth('hong2','2345', :return_val);

print return_val;







TAGS.

Comments