본문 바로가기

oracle10R2

PLP10g Fundamentals

1.11 PL/SQL 블록 구조
SQL> accept g_one prompt 'Enter the first ename:'

variable g_compensation number;

declare
v_onesal number;

begin
select sal into v_onesal
from emp
where ename = UPPER('&g_one');

:g_compensation := v_onesal ;

end;
/

print g_compensation

문제) 이름을 넣으면 직업이 출력되게 위의 프로그램을 수정하시요 !!

1.21 Dbms_output

SQL> set serveroutput on

SQL> ed p1.sql

declare

v_name varchar(20);

begin

select ename into v_name

from emp

where empno=&p_empno;

dbms_output.put_line('The first Name of the employee is ' || v_name);

end;

/

문제) 사원번호를 넣으면 부서번호가 출력되게 하시요 !!

2.6 Dbms_output
accept p_sal prompt 'Please enter the salary:'
accept p_comm prompt 'Enter the commission:'
variable g_compensation number

declare
v_sal number(9, 2) := &p_sal;
v_comm number(9,2) default & p_comm;
v_comm2 constant number := 1400;
begin
:g_compensation := v_sal *12 + nvl(v_comm, 0) + v_comm2 ;
end;
/
print g_compensation

문제) 이름을 넣으면 커미션을 출력하는데 커미션에 500을 더해서 출력하게하시요!

2.8 String Literals

set serveroutput on

declare

event varchar2(15);

begin

event := 'Father''s day';

dbms_output.put_line('3rd sunday in june is: ' || event );

event := q'[Mother 's day]';

dbms_output.put_line('2nd Sunday in May is : ' || event );

end;

/

문제) 아래와 같이 출력되게 위의 스크립트를 수정하시요 !!

3rd sunday in june is: Father's day

2nd Sunday in May is : brother's "birthday"

2.11 PL/SQL Variables

accept p_sal prompt 'Please enter the salary:'

accept p_comm prompt 'Enter the commission:'

variable g_compensation number

declare

v_sal number(9, 2) := &p_sal;

v_comm number(9,2) default & p_comm;

begin

:g_compensation := v_sal *12 + nvl(v_comm, 0);

end;

/

문제) 위의 스크립트를 수정하여 comm 에 어떠한 값이 들어가더라도 혹은 값이

안들어가더라도 무조건 comm 에 200 이 할당되게하라 !!

2.12 Not null Constraint

아래의 스크립트에서 틀린곳을 확인하시요 !!

accept p_sal prompt 'Please enter the salary:'

accept p_comm prompt 'Enter the commission:'

variable g_compensation number

declare

v_sal number(9, 2) := &p_sal;

v_comm number(9,2) not null ;

begin

:g_compensation := v_sal *12 + nvl(v_comm, 0);

end;

/

print g_compensation

2.19 Binary_float

set serveroutput on

declare

bf_var binary_float;

bd_var binary_double;

-- bf_var number;

-- bd_var number;

begin

bf_var := 270/35;

bd_var := 140/0.35;

dbms_output.put_line('bf: ' || bf_var );

dbms_output.put_line('bd: ' || bd_var );

end;

/

문제) 위의 datatype을 number 로 수행한후 결과를 비교해보아라 !

2.21 %TYPE Attribute

variable g_sal number;

declare

v_sal emp.sal%type :=0;

begin

select sal into v_sal

from emp

where empno = &empno;

:g_sal := v_sal;

end;

/

print g_sal

문제) 위의 스크립트를 수정하여 직업도 같이 출력되게하시요 !!

G_SAL

----------

3000

G_JOB

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

SALESMAN

2.21 Boolean Variable

variable g_print varchar2(20)

declare

v_hire_date date := '05/12/31';

v_five_years boolean;

begin

if months_between(sysdate,v_hire_date)/12 > 5 then

v_five_years := true;

else

v_five_years := false;

end if;

if v_five_years = true then

:g_print := 'true';

else

:g_print := 'false';

end if;

end;

/

print g_print

문제) 위의 스크립트를 수정하여 이름을 넣었을 때 그 사원이 근무년수가 5년이상이면 True
출력되게하고 아니면 false 가 출력되게하라 !!

2.28 Bind Variables

variable emp_sal number

set autoprint on

begin

select sal into :emp_sal

from emp

where empno = &empno;

end;

/

문제) 위의 스크립트를 수정하여 사원이름을 넣으면 입사한 년도가 출력되게 하시요!!

EMP_HIREDATE

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

1982

2.31 Substitution Variables

set verify off

variable emp_salary number

accept p_empno prompt 'Please enter a valid empno number: '

set autoprint on

declare

v_empno number(6) := &p_empno;

begin

select sal into :emp_salary

from emp

where empno= v_empno;

end;

/

문제) 위의 스크립트를 수정하여 이름을 물어보게하는데 이름을 대문자로 입력하던

소문자로 입력하던 상관없이 월급이 출력되게하시요!!

3.8 SQL Function in PL/SQL

end accept p_ename prompt 'Please enter the ename: '

variable g_compensation varchar2(50)

declare
v_ename varchar2(20) := upper('&p_ename');
v_job varchar2(10) default 'SALESMAN';

begin
select job into v_job
from emp
where ename= v_ename;

:g_compensation := v_ename ||' is a ' || v_job ;


end;
/

print g_compensation

문제) 직업을 물어보게하고 직업을 넣었을 때 그 직업의 최대월급이 출력되게하라!

3.9 Data Type Conversion

아래의 결과가 출력되겠는가 ?

set autoprint on

variable total_salary number

declare

sal number(6) := 6000;

sal_hike varchar2(5) := '1000';

total_salary number(6);

begin

:total_salary := sal + sal_hike;

end;

/

print total_salary

3.13 Nested Blocks

아래의 결과가 출력되겠는가 ?

set serveroutput on

declare

outer_variable varchar2(20) := 'Grobal Variable';

begin

declare

inner_variable varchar2(20) := 'Local Variable';

begin

dbms_output.put_line(inner_variable);

dbms_output.put_line(outer_variable);

end;

dbms_output.put_line(outer_variable);

dbms_output.put_line(inner_variable);

end;

/


3.16 identifier

set serveroutput on

<<outer>>

declare

father_name varchar2(20) :='Patrick';

date_of_birth date := '80/12/22';

begin

declare

child_name varchar2(20) :='Mike';

date_of_birth date := '89/12/12';

begin

dbms_output.put_line('Father''s Name: '|| father_name);

dbms_output.put_line('Date of Birth: ' || outer.date_of_birth);

dbms_output.put_line('Child''s Name: '|| child_name );

dbms_output.put_line('Date of Birth: ' || date_of_birth);

end;

end;

/

문제) 위의 스크립트에서 outer를 빼면 어떻게 출력될것인가 ?

3.17 identifier

아래와 같이 수행하면 에러가 날것인가 수행될것인가 ?

set serveroutput on

<<outer>>

declare

v_sal number(7,2) := 60000;

v_comm number(7,2) := v_sal * 0.20;

v_message varchar2(255) ;

begin

<<inner>>

declare

v_sal number(7,2) := 50000;

v_comm number(7,2) := 0;

begin

v_message := 'clerk have not ' || inner.v_comm;

end;

v_message := 'SALESMAN and ' || v_message;

dbms_output.put_line(v_message);

end;

/

4.7 SELECT in PL/SQL

Variable salary number

declare
v_sum_sal emp.sal%Type;

Begin
select sum(sal) into v_sum_sal
from emp;

:salary := v_sum_sal;

End;
/

print salary

문제) 직업을 물어보게 하고 그 직업의 토탈월급이 출력되게하라 !! (p4-10 참조)

4.7 Insert in PL/SQL

SQL> create sequence seq1;

DECLARE
v_empno emp.empno%TYPE;
BEGIN
SELECT seq1.NEXTVAL
INTO v_empno
FROM dual;

INSERT INTO emp(empno, ename, job, deptno)
VALUES (v_empno, 'HARDING', 'CLERK', 10 );

end;
/

문제) 위의 insert 문이 10번 반복되서 실행되서 수행되게 하시요 !!

4.7 update in PL/SQL

Accept p_job prompt 'Enter the job: '

DECLARE
v_sal_increase emp.sal%TYPE := 2000 ;
BEGIN
UPDATE emp
SET sal = sal + v_sal_increase
WHERE job = '&p_job';
END ;
/

문제) deptno 를 물어보게하고 deptno 를 넣으면 해당 부서번호인 사원들의

월급을 자기 월급의 2배로 갱신되게 하시요 !!

4.17 Merge in PL/SQL

create table sports
(sp_code varchar2(3),
sp_name varchar2(30),
sp_stat varchar2(1) );

insert into sports values('IB1','SQUASH','Y');
insert into sports values('IB2','RACKETBALL','N');
insert into sports values('OB1','BASEBALL','Y');
insert into sports values('OB2','TENNIS','Y');
insert into sports values('OB3','SOCKER','Y');
insert into sports values('XN1','SWIMMING','Y');
insert into sports values('XB1','BASKETBALL','Y');

create table sport_inform
(sp_code varchar2(3) ,
sp_price number default 0,
sp_season varchar2(10),
sp_tel varchar2(20) );


insert into sport_inform values('IB1',100000,'SPRING','080-2134-2111');
insert into sport_inform values('OB1',200000,'SUMMER','080-2134-2111');
insert into sport_inform values('OB2',100000,'FALL','080-2134-2111');

update sports
set sp_stat='N'
where sp_code='IB1';

SQL> merge into sport_inform si
using sports s
on (s.sp_code=si.sp_code)
when matched then
update set si.sp_price=si.sp_price * 2
when not matched then
insert (si.sp_code, si.sp_season, sp_tel)
values(s.sp_code, 'N/A','114');

문제) soprt 테이블에서 status 가 활성화 되어있는 row만 가격을 두배로 갱신하고

없는 데이터는 입력하라 !!

4.22 implict Cursor

부서번호를 넣으면 해당 부서번호가 지워지게하고 몇 명이 지워졌는지 출력하시요 !

accept p_deptno prompt 'Enter the deptno: '

VARIABLE rows_deleted Varchar2(100)


DECLARE
v_deptno NUMBER := &p_deptno ;

BEGIN

DELETE FROM emp
WHERE deptno = v_deptno ;

:rows_delete d := (SQL%ROWCOUNT ||' rows deleted.');

END ;
/

print rows_deleted

문제) 직업을 넣으면 그 직업인 사원들의 월급을 자기 월급의 두배로 갱신되게하고

몇 명이 갱신되었는지 출력하시요 !!

5.7 if – then - else
accept p_age prompt 'Enter the your age: '

set serveroutput on
declare

myage number := &p_age;

begin

if myage < 11

then

dbms_output.put_line(' I am a child');

else

dbms_output.put_line(' I am not a child ');

end if;

end;

/

문제) 11 이하면 I am a child , 11 살에서 20 사이면 I am a young , 20 이상이면 I am a old 라고 출력되게하시요 !!

5.10 Case Expression

declare

grade char(1) := upper('&grade');

appraisal varchar2(20);

begin

appraisal :=

case grade when 'A' then 'Excellent'

when 'B' then 'Very Good'

when 'C' then 'Good'

Else 'No such grade'

end;

dbms_output.put_line('Grade: ' || grade || 'Appraisal ' || appraisal);

end;

/

문제) 월급을 물어보게 하고 월급이 5000 이상이면 Excellent , 4000~ 5000 사이면 Very Good , 3000 ~ 4000 이면 good , 나머지 사원은 no such grade 라고 출력되게하시요 !!

5.13 Case Statement

accept p_deptno prompt 'Enter the deptno: '

set serveroutput on

declare

v_emp number;

v_deptno number := &p_deptno;

begin

case v_deptno when 10 then

select count(*) into v_emp from emp

where deptno=10;

when 20 then

select count(*) into v_emp from emp

where deptno=20;

when 30 then

select count(*) into v_emp from emp

where deptno=30;

end case;

dbms_output.put_line('employee''s number is ' || v_emp );

end;

/

문제) 직업을 물어보게하고 그 직업의 인원수가 출력되게하시요 !!
5.19 Basic Loop

set serveroutput on

DECLARE
v_count NUMBER(2) := 0;


BEGIN


loop
v_count := v_count + 1;
dbms_output.put_line('count: '||to_char(v_count));
Exit When v_count = 10;
END LOOP;


END;
/


문제) dept 테이블의 deptno 컬럼에 51 번서부터 60번까지 숫자를 넣으시요

dname 은 SALES 로 넣으시고 LOC washington 으로 넣으시요 !!

5.21 While Loop

set serveroutput on

DECLARE

v_count NUMBER(2) := 0 ;

BEGIN

WHILE v_count < &p_max LOOP

v_count := v_count + 1 ;

dbms_output.put_line('count : '||to_char(v_count));

END LOOP ;

End;

/

문제) dept 테이블의 deptno 컬럼에 51 번서부터 60번까지 숫자를 넣으시요

dname 은 SALES 로 넣으시고 LOC 는 washington 으로 넣으시요 !!

5.22 For Loop

set serveroutput on

DECLARE
v_count number(2) := 0;


BEGIN

for i in 1..10 loop

dbms_output.put_line('Cnt : ' ||to_char(i));

end loop;
End;
/

문제) dept 테이블의 deptno 컬럼에 51 번서부터 60번까지 숫자를 넣으시요

dname 은 SALES 로 넣으시고 LOC 는 washington 으로 넣으시요 !!

5.28 Nested Loops

set serveroutput on


Declare
x number(2) := 0;
y number(2) := 0;
z number(2) := 0;


BEGIN
<<Outer_loop>>


LOOP
x := x + 1;
y := 0;
EXIT WHEN x > 9 ;
dbms_output.put_line('==='||to_char(x)||'
===');


<<Inner_loop>>
LOOP

y := y + 1;
EXIT Outer_loop WHEN x > 6;
EXIT WHEN y > 9 ;
z := x * y;
dbms_output.put_line(to_char(x)||' * '||to_char(y) || ' = ' || to_char(z));

END LOOP Inner_loop ;


END LOOP Outer_loop;
END;
/

문제) 5단과 6단만 출력되게하시요 !!

6.7 Nested Loops

Set serveroutput on

declare

type emp_record is record

( empno number(10),

ename varchar2(10),

job varchar2(10) ) ;

v_emp emp_record;

BEGIN

SELECT empno, ename, job

INTO v_emp.empno, v_emp.ename, v_emp.job

FROM emp

WHERE empno = &p_empno;

DBMS_OUTPUT.PUT_LINE( '사원번호 : ' || v_emp.empno );

DBMS_OUTPUT.PUT_LINE( '사원이름 : ' || v_emp.ename );

DBMS_OUTPUT.PUT_LINE( ' : ' || v_emp.job );

END;

/

문제) 부서번호를 넣으면 부서번호와 부서명과 부서위치가 출력되게하시요 !!

6.13 %Rowtype

문제) 위에서 수행한 문제를 %Rowtype 으로 변경하여 수행하시요 !!

6.14 Update by %Rowtype

accept p_empno prompt 'Enter The empno: '

declare

emp_rec emp%rowtype;

v_empno emp.empno%type := &p_empno;

begin

select * into emp_rec from emp

where empno= v_empno;

emp_rec.hiredate := sysdate;

update emp set row= emp_rec

where empno= v_empno;

end;

/

문제) 이름을 물어보게하고 이름을 넣으면 무조건 부서번호가 30번으로 커미션은 1500 ,
직업은 SALESMAN 으로 변경되게 하시요!!


6.23 Index by Table

set serveroutput on

declare

type emp_table_type is table of

hr.employees%rowtype index by pls_integer;

my_emp_table emp_table_type;

max_count number(3) := 104;

begin

for i in 100..max_count loop

select * into my_emp_table(i) from hr.employees

where employee_id= i;

end loop;

for i in my_emp_table.first..my_emp_table.last loop

dbms_output.put_line(my_emp_table(i).last_name);

end loop;

end;

/

문제) 위에서 102번의 last_name 만 출력하겠금 스크립트를 수정하시요.

6.24 Nested Tables

set serveroutput on

declare

type location_type is varray(4) of hr.locations.city%type;

offices location_type;

table_count number;

begin

offices := location_type('Bombay','Tokyo','Singapore','Oxford');

table_count := offices.count();

for i in 1..table_count loop

dbms_output.put_line(offices(i) );

end loop;

end;

/

문제) Tokyo 부터 출력되게 위의 스크립트를 수정하시요 !!

6.26 Varray

문제) 위의 6.24 의 스크립트를 varray 로 수정하시요 !!

7.12 Fetch data

set serveroutput on

declare

v_empno emp.empno%type;

v_ename emp.ename%type;

cursor emp_cursor is

select empno, ename

from emp;

begin

open emp_cursor;

loop

fetch emp_cursor into v_empno, v_ename;

exit when emp_cursor%notfound or emp_cursor%rowcount > 5;

dbms_output.put_line(to_char( v_empno ) || ' ' || v_ename);

end loop;

close emp_cursor;

end;

/

문제) dept 테이블에서 loc 만 출력하는 커서문 작성 !!

7.14 Cursor and record

set serveroutput on

declare

cursor emp_cursor is

select empno, ename from emp

where deptno = 30;

begin

for emp_record in emp_cursor loop

dbms_output.put_line( emp_record.empno || ' ' ||emp_record.ename );

end loop;

end;

/

문제) 위의 스크립트를 7-16 을 보고 for loop 문으로 바꾸시요 !!

7.19 %Rowcount

문제) 7.12 스크립트를 수정하여 5개 이상일 때 loop 가 끝나겠금 하시요 !

7.20 for loop using subquery

accept p_deptno prompt 'enter the deptno: '

set serveroutput on

begin

for emp_record in ( select ename, deptno

from emp

where deptno=&p_deptno ) loop

dbms_output.put_line('Employee ' || emp_record.ename

|| ' works in the sales dept ' || emp_record.deptno);

end loop;

end;

/

문제) 직업을 넣으면 scott 의 직업은 clerk 입니다. 라고 출력되게하시요 !!

7.22 cursor with parameter

set serveroutput on

set verify off

declare

cursor emp_cursor (deptid number) is

select empno, ename

from emp

where deptno= deptid;

v_empno number;

v_ename varchar2(10);

begin

open emp_cursor(10);

loop

fetch emp_cursor into v_empno, v_ename;

exit when emp_cursor%notfound ;

dbms_output.put_line(to_char(v_empno) ||' ' || v_ename );

end loop;

close emp_cursor;

end;

/

문제) 위의 스크립트를 수정하여 부서번호를 물어보겠금 하시요 !!

7.25 where current of

create table univ
( name varchar2(10),
score number(10),
grade varchar2(10) );


insert into univ values('SCOTT1',91, null);
insert into univ values('SCOTT2',76 null);
insert into univ values('SCOTT3',47, null);
insert into univ values('SCOTT4',80, null);
insert into univ values('SCOTT5',96, null);
insert into univ values('SCOTT6',77, null);
insert into univ values('SCOTT7',34, null);
insert into univ values('SCOTT8',99, null);
insert into univ values('SCOTT9', 55, null);
insert into univ values('SCOTT11',75, null);
insert into univ values('SCOTT12',68, null);
insert into univ values('SCOTT13',98, null);
insert into univ values('SCOTT14',88, null);
insert into univ values('SCOTT14',66, null);
insert into univ values('SCOTT16',11, null);


declare

v_name univ.name%type;
v_score univ.score%type;
cursor univ_cur is
select name, score from univ FOR UPDATE;
begin
open univ_cur;
fetch univ_cur into v_name, v_score;
while univ_cur%found loop
if v_score >= 90 then
update univ
set grade = 'A'
where current of univ_cur;
elsif v_score >= 80 then
update univ
set grade = 'B'
where current of univ_cur;

elsif v_score >= 70 then
update univ
set grade = 'C'
where current of univ_cur;
elsif v_score >= 60 then
update univ
set grade = 'D'
where current of univ_cur;
else
update univ
set grade = 'F'
where current of univ_cur;
end if;
fetch univ_cur into v_name, v_score;
end loop;
end;
/

문제) 이름을 모두다 scott 으로 update 하고 위의 스크립트를 돌리고 결과를 보고 해결해보아라 !!

8.3 Example of a Exception

set serveroutput on

declare

v_ename varchar2(10);

begin

select ename into v_ename from emp

where deptno=10;

dbms_output.put_line('JONE''S last name is : ' || v_ename) ;

exception

when too_many_rows then

dbms_output.put_line(' your select statement retrived multiple rows ');

end;

/

8.11 Predefined Exception

accept p_empno prompt 'Enter the empno: '

declare

v_empno emp.empno%type := &p_empno;

v_emp emp%ROWTYPE;

BEGIN

SELECT empno, ename, deptno

INTO v_emp.empno, v_emp.ename, v_emp.deptno

FROM emp

WHERE empno = v_empno ;

DBMS_OUTPUT.PUT_LINE('사번 : ' || v_emp.empno);

DBMS_OUTPUT.PUT_LINE('이름 : ' || v_emp.ename);

DBMS_OUTPUT.PUT_LINE('부서번호 : ' || v_emp.deptno);

EXCEPTION

WHEN TOO_MANY_ROWS THEN

DBMS_OUTPUT.PUT_LINE('TOO_MANY_ROWS에러 발생');

WHEN NO_DATA_FOUND THEN

DBMS_OUTPUT.PUT_LINE('NO_DATA_FOUND에러 발생');

WHEN OTHERS THEN

DBMS_OUTPUT.PUT_LINE('기타 에러 발생');

END;

/

문제) 사원이름을 물어보게하고 해당 사원이 없으면 그런 사원없습니다.

라는 메시지를 출력되게하시요
8.15 Nonpredefined Exception

set serveroutput on

declare

not_null_test EXCEPTION;

/* not_null_test 선언된 예외 이름

-1400 Error 처리번호는 표준 Oracle7 Server Error 번호 */

PRAGMA EXCEPTION_INIT(not_null_test, -1400);

BEGIN

-- empno 입력하지 않아서 NOT NULL 에러 발생

INSERT INTO emp(ename, deptno)

VALUES('tiger', 30);

EXCEPTION

WHEN not_null_test THEN

DBMS_OUTPUT.PUT_LINE('not null 에러 발생 ');

END;

/

문제) 위의 스크립트를 수정하여 emp 테이블의 empno 에 중복된 데이타가 들어갔을때
중복된 데이타가 입력되었다는 에러메세지를 출력하게 하시요 !!

8.17 Trapping Function

accept p_deptno prompt 'Enter the deptno : '

declare

v_deptno emp.deptno%type := &p_deptno ;

v_emp emp%ROWTYPE ;

begin

DBMS_OUTPUT.ENABLE;

-- ERROR발생 for문을 돌려야 됨

SELECT * INTO v_emp

FROM emp

WHERE deptno = v_deptno;

DBMS_OUTPUT.PUT_LINE('사번 : ' || v_emp.empno);

DBMS_OUTPUT.PUT_LINE('이름 : ' || v_emp.ename);

EXCEPTION

WHEN OTHERS THEN

DBMS_OUTPUT.PUT_LINE('ERR CODE : ' || TO_CHAR(SQLCODE));

DBMS_OUTPUT.PUT_LINE('ERR MESSAGE : ' || SQLERRM);

END;

/
8.19 User Defined Exception

accept p_deptno prompt 'Enter the deptno : '

set serveroutput on

declare

v_deptno emp.deptno%type := &p_deptno;

user_define_error EXCEPTION; -- STEP 1

cnt NUMBER;

BEGIN

SELECT COUNT(empno) INTO cnt

FROM emp

WHERE deptno = v_deptno;

IF cnt < 5 THEN

-- RAISE문을 사용하여 직접적으로 예외를 발생시킨다

RAISE user_define_error; -- STEP 2

END IF;

EXCEPTION

-- 예외가 발생할 경우 해당 예외를 참조한다.

WHEN user_define_error THEN -- STEP 3

RAISE_APPLICATION_ERROR(-20001, '부서에 사원이 몇명 안되네요..');

END;

/

문제) 이름을 넣었을 때 입사한지 30년이 넘었으면 퇴임대상입니다” 라는 메시지가 출력되게하시요!!

9.6 Procedure

SQL> create or replace procedure raise_salary
(p_job in emp.job%type)
is
begin
update emp
set comm = sal * 1.5
where job=p_job;
end raise_salary;
/

프로시저가 생성되었습니다.

SQL> execute raise_salary(‘SALESMAN’);

PL/SQL 처리가 정상적으로 완료되었습니다.

문제) 직업을 입력하면 그 직업을 가진 사원들의 커미션이 자기 월급의 50%로
수정되게 하는 프로시져 생성하시요
9.9 Function

SQL> create or replace function tax
( p_value in number )
return number is
begin
return ( p_value * 0.08 );
end tax;
/

SQL> select empno, ename, sal, tax(sal)
from emp
where deptno =20;

문제) tax_table 라는 테이블을 생성하고 tax 함수를 사용하여 이름과 세금을 입력하는데 이름을 jack ,
세금은 월급 3000 에 대한 세금으로 입력하시요 !