[문항1]  

JSP와 오라클 데이터베이스를 JDBC(Java Database Connectivity) 방식으로 연동하는 코드를  작성하시오. [10점]


데이터베이스 이름 : xe
port 번호 : 1521
계정명 : scott
비밀번호 : tiger

 

// JDBC 방식
Class.forName("oracle.jdbc.driver.OracleDriver");
con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "scott", "tiger");

 

 

 

[문항2]  

JSP의 내장객체 중 영역에 관련된 객체(request, session)를 이용하여 회원의 id를 각각 공유 설정하고, 공유된 id를 구해오는 코드를 각각 작성하시오.  [10점]


회원의 id : toto

	String id = "toto";
	request.setAttribute("rid", id);
	session.setAttribute("sid", id);
	
	String r_id = (String)request.getAttribute("rid");
	String s_id = (String)session.getAttribute("sid");

 

 

 

[문항3]  

사용자 폼 태그에서 method=post 방식으로 넘어온 한글 자료를 JSP에서 받을 때 한글을 깨지지 않게 하는 코드를 작성하시오. [10점]

 

		request.setCharacterEncoding("utf-8");

 

 

 

[문항4]  

다음 Java코드와 같은 역할을 하는 내용을 보여주는 JSP 표준액션 코드를 작성 하시오. [10점]


Car sonata = new Car();

<jsp:useBean id="sonata" class="Car"/>

 

 

 

[문항5]  

체크박스는 복수 개를 선택할 수 있다. 복수개가 선택된 값을 JSP에서 String 배열로 받으려면 request객체 하위의 어떠한 메서드를  사용해야 하는가? [10점]

 

답 : request 객체의 getParameterValues() 메소드를 사용하면 된다

 

 

 

[문항6]  

자바 서블릿 코드에서 출력 스트림 객체를 만드는 방법은? [10점]

 

PrintWriter out = response.getWriter();

 

 

 

[문항7]  

다음 보기는 JDBC를 활용하여 테이블에 데이터를 입력하는 프로그램이다. 괄호 (1) (2) (3) (4)를 채워서 완성하시오. [10점]
Class.forName((1));
Connection con=DriverManager.getConnection((2), "scott","tiger");
PreparedStatement pstmt = con.prepareStatement((3));
pstmt.setInt(1, deptno);
pstmt.setString(2, dname);
pstmt.setString(3, loc);
int result = pstmt.(4);
pstmt.close();
con.close();

 

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "scott","tiger");
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setInt(1, deptno);
pstmt.setString(2, dname);
pstmt.setString(3, loc);
int result = pstmt.executeUpdate();
pstmt.close();
con.close();

# 실수했다, sql 대신 SQL문이 들어가야함

# insert into 테이블명 values(?,?,?)

 

 

 

[문항8]  다음과 같은 조건에 맞는 게시판 양식을 작성하세요? [10점]


1) 값 전달 방식은 post 방식으로 한다.
2) 값이 전달될 파일명은 board.jsp 로 작성한다.
3) 입력 양식의 name값은 위에서부터 title, name, password, content 순서로 한다.
4) 확인 버튼은 submit으로 작성한다.
5) 게시판 양식 : boardform.html
    폼에서 넘어온 값을 받는 파일 : board.jsp
    자바빈 클래스 : board – BoardBean.java
boardform.txt 파일로 작성해서 제출하세요.

 

- boardform.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시판</title>
</head>
<body>

<table border=1 align=center>
<form method="post" action="board.jsp">
	<caption>게시판</caption>
	<tr><th>제목</th>
		<td><input type=text name="title"></td>
	</tr>
	<tr><th>작성자</th>
		<td><input type=text name="name"></td>
	</tr>
	<tr><th>비밀번호</th>
		<td><input type=password size=50 name="password"></td>
	</tr>
	<tr><th>내용</th>
		<td><textarea cols=60 rows=10 name="content"></textarea></td>
	</tr>
	<tr><td colspan=2 align=center>
			<input type=submit value="확인">
		</td>
	</tr>
</form>
</table>

</body>
</html>

 

 

 

[문항9]  위 8번 문제의 양식에서 넘어온 값을 저장하기 위한 자바빈(DTO) 클래스를 작성하세요? [10점]


1) 입력 양식의 name값은 위에서부터 title, name, password, content 순서로 한다.
2) 자바빈 클래스의 package는 board로 작성한다.
3) 자바빈 클래스는 BoardBean 으로 작성한다.
4) 게시판 양식 : boardform.html 
    자바빈 클래스 : board – BoardBean.java
boardbean.txt 파일로 작성해서 제출하세요.

 

- board/BoardBean.java

package board;

public class BoardBean {
	private String title;
	private String name;
	private String password;
	private String content;
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
}

 

 

[문항10]  위 8번 문제의 게시판 폼에서 넘어온 값을 액션태그를 사용하여 자바빈 클래스(DTO)에 저장하고 출력하는 프로그램을 작성하세요. [10점]


1) 한글값이 깨지지 않도록 처리한다.
2) 게시판 폼에서 넘어온 값을 액션태그를 이용해서 자바빈 클래스에 저장하고, 저장된 값을 출력하시오.
3) 게시판 양식 : boardform.html
    폼에서 넘어온 값을 받는 파일 : board.jsp
    자바빈 클래스 : board – BoardBean.java
board.txt 파일로 작성해서 제출하세요.

 

- board.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%
	request.setCharacterEncoding("utf-8");
%>
<jsp:useBean id="board" class="board.BoardBean"/>
<jsp:setProperty property="*" name="board"/>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

제목 : <jsp:getProperty name="board"  property="title" /> <br>
작성자 : <jsp:getProperty name="board" property="name" /> <br>
비밀번호 : <jsp:getProperty name="board" property="password" /> <br>
내용 : <jsp:getProperty name="board" property="content" />

</body>
</html>

 

 

점수

98 / 100

 

 

 

HTML / Javascript 유효성 검사

웹표준 기술을 이용해서 아래의 조건에 맞는 양식을 만들고 유효성 검사를 하시오

1) 값 전달 방식은 post 방식으로 하고, action은 gugu.jsp 로 하시오.
2) 제목 : 보고 싶은 구구단은?
3) select 태그를 이용하여 2 ~ 9중에서 선택할 수 있도록 작성하시오.
4) 확인 버튼의 type은 submit로 설정 하시오.
5) 구구단을 선택하지 않고 확인버튼 눌렀을 때 유효성검사를 하시오.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script>
	// 유효성 검사
	function check(){
		var dan = document.getElementById("dan");
		if(dan.value == ""){
			alert("구구단을 선택하세요.");
			dan.focus();
			return false;
		}
	}
</script>
</head>
<body>
<form method="post" action="gugu.jsp" onSubmit="return check()">
	<h1>보고싶은 구구단은 ?</h1>
	<select id="dan" name="dan" style="width:100px">
		<option value="">선택안함</option>
		<option value="2">2</option>
		<option value="3">3</option>
		<option value="4">4</option>
		<option value="5">5</option>
		<option value="6">6</option>
		<option value="7">7</option>
		<option value="8">8</option>
		<option value="9">9</option>
	</select>
	<br><br>
	<input type="submit" value="확인">
</form>
</body>
</html>

 

JSP 태그 / 값 전달받기

위 1번 문제 양식에서 선택한 구구단을 아래와 같이 출력하는 파일을 작성하시오

1) 앞의 문제에서 선택한 구구단을 받아서 아래와 같이 출력 하시오.
2) 출력 파일은 gugu.jsp 파일로 작성하시오.
3) 제목(구구단 7단)의 한글값이 깨지지 않도록 처리하시오.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	int dan = Integer.parseInt(request.getParameter("dan"));
%>
<h1>구구단 <%=dan %>단 </h1>
<%
	for(int i = 1; i < 10 ; i ++) {
		out.println(dan + " * " + i + " = " + dan * i + "<br>");
	}
%>

 

Javascript 유효성 검사

웹표준 기술을 이용해서 아래의 조건에 맞는 양식을 만들고 유효성 검사를 하시오

1) 값 전달 방식은 post 방식으로 한다.
2) 입력 양식의 id는 위에서부터 myid, mypasswd로 각각 설정한다.
3) 로그인 버튼의 type은 submit으로 하고, 취소 버튼은 reset으로 설정한다.
4) 로그인 버튼 눌렀을 때 유효성검사를 하시오.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 폼</title>
<script>
	 function check(){
		var myid = document.getElementById("myid");	
		var mypasswd = document.getElementById("mypasswd");	
		
		if(myid.value == ""){
			alert("ID를 입력 하세요.");
			myid.focus();
			return false;
		}
		if(mypasswd.value == ""){
			alert("비밀번호를 입력하세요.");
			mypasswd.focus();
			return false;
		}
	}
</script>

</head>
<body>

<form method="post" action="login.jsp" onSubmit="return check()">
<table border=1 width=350 align=center>
	<caption>로그인</caption>
	<tr><td>ID</td>
		<td><input type=text size=20
							 maxlength=10
							 autofocus="autofocus"
							 name="myid"
							 id="myid">		
		</td>
	</tr>
	<tr><td>비밀번호</td>
		<td><input type=password size=20
								 name="mypasswd"
								 id="mypasswd">
		</td>
	</tr>
	<tr><td colspan=2 align=center>
			<input type=submit value="로그인">
			<input type=reset value="취소">
		</td>
	</tr>
</table>
</form>

</body>
</html>

 

Javascript 유효성 검사

웹표준 기술을 이용해서 아래의 조건에 맞는 양식을 만들고 유효성 검사를 하시오

1) 값 전달 방식은 post 방식으로 한다.
2) 입력 양식의 id는 위에서부터 title, name, mypasswd, mycontent로 각각 설정한다.
3) 확인 버튼의 type은 submit으로 설정한다.
4) 확인 버튼 눌렀을 때 유효성검사를 하시오.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시판</title>
<script>
	 function check(){
		var title = document.getElementById("title");
		var name = document.getElementById("name");
		var mypasswd = document.getElementById("mypasswd");
		var mycontent = document.getElementById("mycontent");
		
		if(title.value == ""){
			alert("제목을 입력 하세요.");
			title.focus();
			return false;
		}
		if(name.value == ""){
			alert("작성자를 입력 하세요.");
			name.focus();
			return false;
		}
		if(mypasswd.value == ""){
			alert("비밀번호를 입력 하세요.");
			mypasswd.focus();
			return false;
		}
		if(mycontent.value == ""){
			alert("내용을 입력 하세요.");
			mycontent.focus();
			return false;
		}
	}
</script>

</head>
<body>

<form method="post" action="board.jsp" onSubmit="return check()">
<table border=1 width=500 align=center>
	<caption>게시판</caption>
	<tr>
		<th>제목</th>
		<td><input type=text size=20 name="title"
									 id="title">
		</td>
	</tr>
	<tr>
		<th>작성자</th>
		<td><input type=text size=20 name="name"
									 id="name">
		</td>
	</tr>
	<tr>
		<th>비밀번호</th>
		<td><input type=password name="mypasswd"
							     id="mypasswd">
	    </td>
	</tr>
	<tr>
		<th>내용</th>
		<td><textarea rows="5" cols="50" name="mycontent"
 					id="mycontent"></textarea>
		</td>
	</tr>
	<tr>
		<td colspan=2 align=center>
			<input type="submit" value="확인">
		</td>
	</tr>
</table>
</form>

</body>
</html>

 

Javascript 유효성 검사
웹표준 기술을 이용해서 아래의 조건에 맞는 양식을 만들고 유효성 검사를 하시오

1) 값 전달 방식은 post 방식으로 한다.
2) ID중복검사 버튼의 type은 button을 작성한다.
3) 핸드폰 번호 앞자리는 반드시 선택하도록 유효성 검사를 하시오.
4) 성별도 남자, 여자 중에서 1개를 선택하도록 유효성 검사를 하시오.
5) 취미는 반드시 2개 이상 선택 하도록 유효성 검사를 하시오.
6) 자기소개는 100자 이내로 입력 하도록 유효성 검사를 하시오.
7) 회원가입 버튼의 type은 submit으로 작성하시오.
8) 입력 및 선택 양식에 대해서 모두 유효성 검사를 하시오.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입 폼</title>

<script>

	// 유효성 검사
	function check(){
		var id = document.getElementById("id");
		var passwd = document.getElementById("passwd");
		var name = document.getElementById("name");
		var mailid = document.getElementById("mailid");
		var domain = document.getElementById("domain");
		var phone1 = document.getElementById("phone1");
		var phone2 = document.getElementById("phone2");
		var phone3 = document.getElementById("phone3");
		var male = document.getElementById("male");
		var female = document.getElementById("female");
		var h1 = document.getElementById("h1");
		var h2 = document.getElementById("h2");
		var h3 = document.getElementById("h3");
		var h4 = document.getElementById("h4");
		var h5 = document.getElementById("h5");
		var intro = document.getElementById("intro");
		
		if(id.value == ""){
			alert("ID를 입력 하세요.");
			id.focus();
			return false;
		}
		if(passwd.value == ""){
			alert("비밀번호를 입력 하세요.");
			passwd.focus();
			return false;
		}
		if(name.value == ""){
			alert("성명을 입력 하세요.");
			name.focus();
			return false;
		}
		if(mailid.value == ""){
			alert("EMail주소를 입력 하세요.");
			mailid.focus();
			return false;
		}
		if(domain.value == ""){
			alert("도메인을 입력 하세요.");
			domain.focus();
			return false;
		}
		if(phone1.value == ""){
			alert("핸드폰 앞자리를 입력 하세요.");
			phone1.focus();
			return false;
		}
		if(phone2.value == ""){
			alert("핸드폰 중간자리를 입력 하세요.");
			phone2.focus();
			return false;
		}
		if(isNaN(phone2.value)){
			alert("숫자만 입력 하세요.");
			phone2.value = "";
			phone2.focus();
			return false;
		}
		if(phone3.value == ""){
			alert("핸드폰 끝자리를 입력 하세요.");
			phone3.focus();
			return false;
		}
		if(isNaN(phone3.value)){
			alert("숫자만 입력 하세요.");
			phone3.value = "";
			phone3.focus();
			return false;
		}
		if(male.checked == false && female.checked == false){
			alert("성별을 선택 하세요.");
			return false;
		}
		
		var cnt = 0;
		if(h1.checked) cnt++;
		if(h2.checked) cnt++;
		if(h3.checked) cnt++;
		if(h4.checked) cnt++;
		if(h5.checked) cnt++;
		
		if(cnt < 2){
			alert("취미를 2개 이상 선택 하세요.");
			return false;
		}
		
		if(intro.value == ""){
			alert("자기소개를 입력 하세요.");
			intro.focus();
			return false;
		}
		if(intro.value.length > 100){
			alert("자기소개를 100자 까지 입력 하세요.");
			intro.focus();
			return false;
		}		
	}
</script>

</head>
<body>

<form method="post" action="member.jsp" onSubmit="return check()">
<table border=1 width=600 align=center>
	<caption>회원 가입폼</caption>
	<tr>
		<th>ID</th>
		<td><input type=text name="id" id="id" autofocus="autofocus">
		    <input type="button" value="ID중복검사">		
		</td>
	</tr>
	<tr>
		<th>비밀번호</th>
		<td><input type=password name="passwd" id="passwd"></td>
	</tr>	
	<tr>
		<th>성명</th>
		<td><input type=text name="name" id="name"></td>
	</tr>
	<tr>
		<th>E-Mail</th>
		<td><input type=text size=10 name="mailid" id="mailid">@
		    <input type=text size=15 name="domain" id="domain"> 
		    <select id="email" onChange="sel()">
		    	<option value="">직접입력</option>
		    	<option value="naver.com">네이버</option>
		    	<option value="daum.net">다음</option>
		    	<option value="nate.com">네이트</option>
		    	<option value="gmail.com">구글</option>
		    </select>
		</td>
	</tr>
	<tr>
		<th>핸드폰</th>
		<td><select name="phone1" id="phone1">
				<option value="">번호선택</option>
				<option value="010">010</option>
				<option value="011">011</option>
				<option value="016">016</option>
				<option value="018">018</option>
				<option value="019">019</option>
			</select>
			<input type=text size=4 maxlength=4 name="phone2" id="phone2">-
			<input type=text size=4 maxlength=4 name="phone3" id="phone3">
		</td>
	</tr>
	<tr>
		<th>성별</th>
		<td>
			<input type="radio" id="male" name="gender" value="남자">남자
			<input type="radio" id="female" name="gender" value="여자">여자
		</td>
	</tr>
	<tr>
		<th>취미</th>
		<td>
			<input type="checkbox" id="h1" name="hobby" value="공부">공부
			<input type="checkbox" id="h2" name="hobby" value="등산">등산
			<input type="checkbox" id="h3" name="hobby" value="게임">게임
			<input type="checkbox" id="h4" name="hobby" value="낚시">낚시
			<input type="checkbox" id="h5" name="hobby" value="쇼핑">쇼핑
		</td>
	</tr>
	<tr>
		<th>자기소개</th>
		<td><textarea rows="5" cols="70"
				name="intro" id="intro"
				placeholder="자기소개를 100자 이내로 입력하세요"></textarea>
		</td>
	</tr>
	<tr>
		<td colspan=2 align=center>
			<input type="submit" value="회원가입">
			<input type="reset" value="취소">
		</td>
	</tr>
</table>
</form>

</body>
</html>

 

 

점수

100 / 100

과제
2022.08.12/ Hw1

Math.random() 을 이용해서 1~45 사이의 난수를 6개 추출 하는 프로그램을 작성
조건 1.중복 되지 않는 값을 구해야함.

조건 2.구해진 값을 오름차순으로 정렬해서 출력

 

 

의도

Math 객체 함수 사용

난수발생 함수 사용

 

 

깃허브

https://github.com/kindacool/Hw/blob/main/HW20220812/20220812_hw1.html

 

GitHub - kindacool/Hw

Contribute to kindacool/Hw development by creating an account on GitHub.

github.com

 

 

코드

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script>

/* 과제. Math.random()을 이용해서 1~45 사이의 난수를 6개 추출 하는 프로그램을 작성
(조건 1.중복 되지 않는 값을 구해야함, 2.구해진 값을 오름차순으로 정렬해서 출력) */

	// 배열 선언
	var random = Array();
	
	// 난수 발생, 중복검사, 정렬
	for(var i = 0; i < 6; i++) {
		random[i] = Math.ceil(Math.random() * 45);	// 1 ~ 45 난수 발생
		for(var j = 0; j < i; j++) {
			// 중복검사
			if(random[i] == random[j]){
				i--;
				break;
			}
			// 정렬
			if(random[i] < random[j]) {
				random.splice(j, 0, random[i])// 그 j의 자리에 넣어야함
				random.pop(); // 그리고 맨 마지막의 random[i] 삭제
			}
		}
	}
	
	//출력
	document.write("번호 : " + random + "<br>");
//	document.write(random.sort() + "<br>"); 는 안된다.
	
	

	
</script>
</body>
</html>

 

 

출력

 

 

강사님 코드

<html>
 <head>
  <meta charset="UTF-8">
  <title> lotto </title>
  <script>

function find(){
	var lotto = new Array();

	for(var i=0; i<6; i++){
		// 1~45 난수 발생 부분 
//		lotto[0]=10; lotto[1]=10; 
		lotto[i] = Math.floor(Math.random()*45)+1;

		//중복 검사 부분
		for(var j=0; j<i; j++){
			if(lotto[i] == lotto[j]){
				i--;
				break;
			}
		}
	}
//	lotto.sort();

// 정렬방식 : 오름차순 (1,2,3....)
  lotto.sort(function(a,b){
   return a-b;
  });

// 정렬방식 : 내림차순 (10,9,8...)
//  lotto.sort(function(a,b){
//   return b-a;
//  });

    document.write(lotto);

//	for(var k=0; k<6; k++){
//		document.write(lotto[k]+"  ");
//	}

}
  </script>
 </head>

 <body>
 <form>
	<input type=button value="추첨하기" onClick="find()">
 </form> 
 </body>
</html>

과제
2022.08.11/ Hw1

구구단(2~9단)을 열방향(세로방향)으로 출력하는 프로그램을  작성하세요 (테이블 태그를 사용해서 처리)

참고사진

 

 

의도

Javascript 제어문 사용

Javascript 내에서 HTML 태그 사용

 

 

깃허브

https://github.com/kindacool/Hw/blob/main/HW20220811/20220811_hw1.html

 

GitHub - kindacool/Hw

Contribute to kindacool/Hw development by creating an account on GitHub.

github.com

 

 

코드

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
caption {
	font-size : 30px;
	font-weight: bold;
}
</style>
</head>
<body>
<script>
	// 구구단(2~9단)을 열방향(세로방향)으로 출력하는 프로그램을  작성하세요? (테이블 태그를 사용해서 처리)

	//테이블시작
	document.write("<table border=1 align=center cellpadding = 15>");
	document.write("<caption>구구단</caption>");
	//헤드(1행)
	document.write("<tr>");
	for(var dan = 2; dan <= 9; dan++) {
		document.write("<th>" + dan + "단</th>");
	}
	document.write("</tr>")	;

	//바디(2행)
	document.write("<tr>");
	for(var dan = 2; dan <= 9; dan++) {
		document.write("<td>")
		for(var i = 1; i <= 9; i ++) {
			document.write(dan + " * " + i + " = " + dan*i + "<br>");
		}
		document.write("</td>")
	}
	document.write("</tr>")	;
	//테이블끝
	document.write("</table>");

</script>
</body>
</html>

 

 

출력

 

 

강사님 코드

<!DOCTYPE html>
<html>
<head><title>구구단</title>
	  <meta charset="UTF-8">
	  <style>
	  	td{text-align:center}
	  	caption{font-size:30px}
	  </style>
</head>

<body>
<table border=1 align=center width=800 height=280>
<caption>구구단</caption>
<tr>

<script>

for(var dan=2; dan<=9; dan++)
	document.write("<th>[ "+dan+" 단 ]</th>");
	document.write("</tr><tr>");

for(var dan=2;dan<=9;dan++) {	// 단
//	document.write("<td>"+dan+"단<br>");
	document.write("<td>");
	for(var i=1;i<=9;i++) {
		document.write(dan+"*"+i+"="+dan*i+"<br>");
	}
	document.write("</td>");
}

</script>

</tr>
</table>
</body>
</html>

 

기본 개념

트리거와 프로시저의 차이점은 무엇인지 서술하시오

트리거는 이벤트(주로 DML sql문) 발생시 자동으로 실행되지만 프로시저는 명시적으로 호출을 해줘야만 실행이 된다.

 

PL/SQL

1~10 사이의 정수 중에서 짝수의 합을 구하는 PL/SQL 프로그램을 작성 하시오

SET SERVEROUTPUT ON
declare
    n number := 1; -- 루프를 돌릴 변수
    s number := 0; -- 합이 누적될 변수
begin
    loop
        if n > 10 then
            exit;
        end if;
                
        if mod(n, 2) = 1 then -- 홀수일 때는
            s := s + 0;       -- 누적 안시킴
        else                  -- 짝수일 때는
            s := s + n;       -- 누적 시킴
        end if;

        n := n + 1; -- 1씩 증가
        
    end loop;
    DBMS_OUTPUT.put_line('1~10 사이의 정수 중에서 짝수의 합 : ' || s);
end;

 

프로시저 생성, 실행

사원 테이블(EMP)에서 사원번호(EMPNO)를 매개변수로 받아서, 사원 정보를 삭제하는 프로시저를 생성하고, 프로시저를 실행하시오

-- 저장 프로시저 생성
create or replace procedure del_emp (vempno in emp.empno%type)
is
begin
    delete from emp where empno = vempno;
end;

-- 프로시저 실행
execute del_emp(7788);

 

프로시저 생성, 실행

사원테이블(EMP)에서 SCOTT 사원의 사원명을 프로시저의 매개변수로 전달해서 SCOTT 사원의 급여를 출력하는 프로시저를 생성하고 실행하시오
1) 프로시저명은 emp_sal 이름으로 생성한다.
2) 생성된 프로시저를 실행할때 매개변수에 SCOTT 사원을 전달해서 실행한다.

-- 프로시저 생성
create or replace procedure emp_sal (
    vename in emp.ename%type,
    vsal out emp.sal%type)
is
begin
    select sal into vsal from emp where ename = vename;
end;

-- 바인드 변수 생성
variable var_sal number;

-- 프로시저 실행
execute emp_sal('SCOTT', :var_sal);

-- 출력
print var_sal;

 

프로시저 생성, 실행

사원 테이블(EMP)에서 사원번호를 프로시저의 매개변수로 전달 받아서, 그 사원의 사원명, 급여, 부서번호를 구하는 프로시저 생성해서 실행하시오?
1) 프로시저명은 emp_info 이름으로 생성한다.
2) 생성된 프로시저를 실행할때 매개변수에 사원들의 사원번호를 전달해서 실행한다.
3) 프로시저를 실행할때 바인드변수를 만들어서 출력한다.

-- 프로시저 생성
create or replace procedure emp_info (
    vempno in emp.empno%type,
    vename out emp.ename%type,
    vsal out emp.sal%type,
    vdeptno out emp.deptno%type )
is
begin
    select ename, sal, deptno into vename, vsal, vdeptno from emp where empno = vempno;
end;

-- 바인드 변수 생성
variable var_ename varchar2(10);
variable var_sal number;
variable var_deptno number;

-- 프로시저 실행
execute emp_info(7788, :var_ename, :var_sal, :var_deptno);

-- 출력
print var_ename;
print var_sal;
print var_deptno;

 

 

점수

100 / 100

과제
2022.08.04/ Hw1

다음과 같은 모양으로 출력하는 html파일을 작성하세요

 

 

의도

HTML 작성

테이블 작성

colspan 사용

rowspan 사용

 

 

깃허브

https://github.com/kindacool/Hw/blob/main/HW20220804/20220804_hw1.html

 

GitHub - kindacool/Hw

Contribute to kindacool/Hw development by creating an account on GitHub.

github.com

 

 

코드

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>2022.08.04_hw1</title>
</head>
<body>

<table border=1 width=600 height=300 align=center			 
							bgcolor=yellow
							cellspacing=5
							cellpadding=5>
<caption>표 연 습</caption>
<tr>
	<th rowspan=4>신<br>청<br>내<br>역</th>
	<th colspan=2>청소년</th>
	<th colspan=2>노인</th>
	<th rowspan=2>비고</th>
</tr>
<tr align=center>
	<td>남자</td>
	<td>여자</td>
	<td>남자</td>
	<td>여자</td>
</tr>
<tr align=center>
	<td>10</td>
	<td>50</td>
	<td>60</td>
	<td>80</td>
	<td rowspan=2></td>
</tr>
<tr align=center>
	<td>80</td>
	<td>60</td>
	<td>68</td>
	<td>78</td>
</tr>
</table>

</body>
</html>

 

 

출력

 

 

서브쿼리 문제

사원 테이블(EMP)에서 SCOTT의 급여보다 적게 받는 사원의 이름, 급여를 출력하는 SQL문을 작성하시오

select ename, sal from emp where sal < (select sal from emp where ename = 'SCOTT');

 

그룹화, 그룹함수

사원 테이블(EMP)에서 각 부서별 평균 급여를 구하는 SQL문을 작성하시오

select avg(sal) from emp group by deptno;

감점 -5 점, 어느 부서의 평균인지 모르기때문에 5점이 감점됨 

답 > select deptno, avg(sal) from emp group by deptno;

 

Like 연산자, 와일드카드

사원테이블(EMP)에서 사원명에 A가 포함된 사원을 검색하는 SQL문을 작성하시오

select * from emp where ename like '%A%';

 

서브쿼리 인라인뷰, rownum

사원테이블(EMP)에서 급여를 많이 받는 사원 5명을 구하는 SQL문을 인라인뷰로 작성하시오

select rownum, ename, sal from (
    select * from emp order by sal desc)
where rownum <= 5;

 

substr

사원테이블(EMP)에서 82년도에 입사한 모든 사원의 정보를 출력하는 SQL문을 작성하시오

select * from emp where substr(hiredate, 1, 2) = '82';

 

nvl 함수, 별칭

사원테이블(EMP)에서 사번, 이름, 급여, 연봉을 조회하는 SQL문장을 작성하시오

단, 연봉은 별칭을 사용하고, comm이 null값인 경우에는 0으로 연산 처리하시오.

select empno, ename, sal, sal * 12 + nvl(comm, 0) 연봉 from emp;

 

새로운 계정 생성, 권한 부여
아래의 문제에서 요구하는 SQL문을 각각 작성하시오
1) 아래의 정보로 전산실에 입사한 신입사원에게 새로운 계정을 생성하시오.
    계정명 : myuser ,  비밀번호 : tiger
2) 생성한 계정에게 데이터 접속 및 테이블, 뷰를 생성할 수 있는 권한을 롤(role)을 이용하여 부여하시오.

--1) 아래의 정보로 전산실에 입사한 신입사원에게 새로운 계정을 생성하시오.
--    계정명 : myuser ,  비밀번호 : tiger

create user myuser identified by tiger;

--2) 생성한 계정에게 데이터 접속 및 테이블, 뷰를 생성할 수 있는 권한을 롤(role)을 이용하여 부여하시오.

grant connect, resource to myuser;

 

테이블 관계, foreign key

아래의 명세서에 따라 제약조건을 만족하는 테이블을 각각 작성하시오

create table Book (
    bookid number(2) primary key,
    bookname varchar2(40),
    publisher varchar2(40),
    price number(8) );

create table Customer (
    custid number(2) primary key,
    name varchar2(40),
    address varchar2(50),
    phone varchar2(20) );
    
create table Orders (
    orderid number(2) primary key,
    custid number(2) references Customer(custid),
    bookid number(2) references Book(bookid),
    saleprice number(8),
    orderdate date );

 

 

점수

95 / 100

조건에 맞는 테이블 생성 (제약조건)

아래와 같은 조회결과가 나오도록 주어진 조건에 맞게 book 테이블을 생성하시오

 

조건1 : no 컬럼은 반드시, 중복되지 않은 값이 들어가도록 설정한다.
조건2 : title 컬럼에는 반드시 값이 들어가도록 설정한다.
조건3 : pub_day 컬럼에 값을 넣지 않으면 기본 값으로 오늘 날짜가 들어가도록 설정 한다.

create table book (
    no number primary key,
    title varchar2(12) not null,
    author varchar2(12),
    publisher varchar2(12),
    price number,
    pub_day date default sysdate);

 

포맷에 맞는 날짜 출력 (형변환)

Oracle 데이터베이스를 통한 현재 날짜를 기본형식(22/01/01)과

사용자 형식(2022-01-01)으로 차례로 출력하는 SQL문을 작성하시오

사용자 형식은 연도를 4자리로 출력 하도록 한다.

select sysdate 기본형식, to_char(sysdate, 'YYYY-MM-DD') 사용자형식 from dual;

 

그룹함수, 서브쿼리 문제

사원테이블(EMP)에서 최대 급여를 받는 사원명과, 최대급여 금액을 출력하는 SQL문을 작성하시오

select ename, sal from emp where sal = (select max(sal) from emp);

 

mysql의 auto_increment 와 insert문을 oracle 코드로 옮기기 (sequence)

MySQL을 Oracle로 DB Migration을 하고자 한다. 마이그레이션 한 결과가 같아지도록 아래 내용을 완성하시오

1. Oracle sequence 생성
2. insert문 작성하기

create table member (
    id NUMBER(6) primary key,
    name VARCHAR2(20)
);

-- 1. Oracle sequence 생성
create sequence member_id_seq;
-- 2. insert문 작성하기
insert into member values(member_id_seq.nextval, 'hong');

 

테이블 레벨 방식으로 제약조건 설정 (복합키)

다음은 테이블을 만들 때 name, phone 컬럼을 기본키로 만들려고 한다.

composite key(복합키) 이름(Constraint)은 member_compo_pk이며, 아래 테이블을 완성하시오

create table member1(
    name varchar2(10),
    address varchar2(30),
    phone varchar2(16),
    constraint member_compo_pk primary key (name, phone) );

 

 

점수

100 / 100

과제
2022.08.01/ Hw1

사원 테이블에서 사원명을 검색하여 사원의 직급을 구해오는 

저장 프로시저를 만들어서 실행하세요

 

 

의도

PL/SQL

저장 프로시저 사용

 

 

깃허브

https://github.com/kindacool/Hw/blob/main/HW20220801/2022_08_01_hw1.sql

 

GitHub - kindacool/Hw

Contribute to kindacool/Hw development by creating an account on GitHub.

github.com

 

 

코드

-- Q1. 사원 테이블에서 사원명을 검색하여 사원의 직급을 구해오는 저장 프로시저를 만들어서 실행하세요

-- 프로시저 생성
create or replace procedure job_ename (
    vename in emp.ename%type,
    vjob out emp.job%type)
is
begin
    select job into vjob from emp
    where ename = vename;
end;

-- 바인드 함수 생성
variable var_job varchar2(10);

-- 프로시저 실행
execute job_ename('SCOTT', :var_job);

-- 출력
print var_job;

 

 

출력

 

 

강사님 코드

-- 사원 테이블에서 사원명을 검색하여 사원의 직급을 구해오는 저장 프로시저를 만들어서 실행하세요?

--1. 저장 프로시저 생성
create or replace procedure ename_job(
        vename in emp.ename%type,
        vjob out emp.job%type)
is
begin
    select job into vjob from emp where ename = vename;
end;

--2. 프로시저 목록 확인
select * from  user_source;

--3. 바인드 변수 생성
variable var_job varchar2(10);

--4. 프로시저 실행
execute ename_job('SCOTT', :var_job); 
execute ename_job('KING', :var_job); 
execute ename_job('SMITH', :var_job); 

--5. 바인드 변수로 받은 값 출력
print var_job;

과제
2022.07.25 / Hw3

 직급이 'SALESMAN'인 사원이 받는 급여들의 최소 급여보다 많이 받는 사원들의 

이름과 급여를 출력하되 부서번호가 20번인 사원은 제외한다.(ANY연산자 이용)

 

 

의도

단일행 서브 쿼리 사용

다중행 서브 쿼리 사용

 

 

깃허브

https://github.com/kindacool/Hw/blob/main/HW20220725/2022_07_25_hw3.sql

 

GitHub - kindacool/Hw

Contribute to kindacool/Hw development by creating an account on GitHub.

github.com

 

 

코드

-- Q3. 직급이 'SALESMAN'인 사원이 받는 급여들의 최소 급여보다 많이 받는 사원들의 이름과 급여를 출력하되 부서번호가 
--	20번인 사원은 제외한다.(ANY연산자 이용)

-- 1) 단일행 서브쿼리로 풀기
select ename, sal from emp where sal > (select min(sal) from emp where job = 'SALESMAN') and deptno <> 20;
-- 2) 다중행 서브쿼리로 풀기
select ename, sal from emp where sal > any (select sal from emp where job = 'SALESMAN') and deptno <> 20;

 

 

출력

 

 

강사님 코드

-- Q3. 직급이 'SALESMAN'인 사원이 받는 급여들의 최소 급여보다 
-- 많이 받는 사원들의 이름과 급여를 출력하되 부서번호가 
-- 20번이 사원은 제외한다.(ANY연산자 이용)

-- 단일행 서브쿼리
select ename, sal from emp where sal > 
    (select min(sal)  from emp where job='SALESMAN') and deptno != 20;

-- 다중행 서브쿼리
select ename, sal from emp where sal > any
    (select sal from emp where job='SALESMAN') and deptno != 20;

+ Recent posts