[oracle] 날짜 + 번호 일련번호 생성하기

Posted by 백창
2015. 12. 13. 03:23 개발/Oracle
반응형

# 개요


 Oracle에서 스케줄 등록 없이 날짜 + 숫자 와 같은 형식의 일련번호를 생성해보자.


# 코드


1
2
3
4
5
6
select 
    to_number(to_char(sysdate,'YYMMDD'|| nvl(to_char(max(substr(sales_no,7))),'00'))+1
from
    sales
where
    to_char(sales_date,'YYYYMMDD'= to_char(sysdate,'YYYYMMDD')    
cs


# 설명


 일련번호의 형태로 많이 사용하는 방식은 YYYYMMDD + 00001 와 같은 방식일 것이다. 


 이런 일련번호를 생성하기 위해서는 스케줄을 등록하여 하루가 지날때마다 초기 값을 지정해주는 방법이 있었다.


 개발 중인 프로그램의 특성상 DB서버를 항상 켜두는 것이 아니기 때문에 insert 시 계산하는 방법에 대해 고민해보았다.


 아직 학생이라 효율성의 측면까지는 생각하지 못하였고 동작은 잘 되고 있다.


# 전체 SQL 및 DB



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<insert id="addNewOrder" parameterType="com.nara.order.vo.AddOrder">
    <selectKey order="BEFORE" keyProperty="sales_no" resultType="int">
        select 
            to_number(to_char(sysdate,'YYMMDD'|| nvl(to_char(max(substr(sales_no,7))),'00'))+1
        from
            sales
         where
            to_char(sales_date,'YYYYMMDD'= to_char(sysdate,'YYYYMMDD')
    </selectKey>
    insert
        into sales
            (sales_no, cust_no, cost_sum, sales_date, pay, section)
        values
            (#{sales_no}, #{cust_no}, #{cost_sum}, sysdate, #{pay}, #{section})
</insert>
cs



# 동작 결과




반응형

'개발 > Oracle' 카테고리의 다른 글

오라클에서 시간을 기준으로 데이터 복구  (0) 2021.09.16
[oracle] DB Link  (0) 2016.04.07

GPIO 및 웹 서버를 이용하여 라즈베리파이 제어

Posted by 백창
2015. 11. 14. 10:07 리눅스/라즈베리파이
반응형

# 개요


 GPIO와 웹서버를 통하여 라즈베리파이를 제어하자.


 본 포스팅의 내용대로 수행 시 서버 보안의 큰 문제가 생길 수 있기 때문에 테스트 서버에서 혼자서만 사용하도록 하자.



# 설정


 php에서 wiringPi소스를 실행하기 위해 (wiringPi 소스는 root 권한으로 실행해야 한다)


 /etc/sudoers 파일에서 모든 파일 접근 시 권한 요구를 받지 않도록 설정해준다.


 www-data ALL = NOPASSWD: ALL





# 동작 설명


 웹 서버의 버튼을 클릭하면 Ajax통신을 통해 해당 버튼의 기능을 실행한다.


 각 버튼은 php의 쉘 명령어 실행 코드로 wiringPi 코드를 실행하도록 한다.




# Ajax 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 <script language="javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
        <script>
        $(document).ready(function(){
                $("#fw").mousedown(function(){
                        $.ajax({
                                type:'post'
                                ,url:'./fw.php'
                        });
                })
        });
 
        $(document).ready(function(){
                $("#bw").mousedown(function(){
                        $.ajax({
                                type:'post'
                                ,url:'./bw.php'
                        });
                })
        });
 
        $(document).ready(function(){
                $("#lw").mousedown(function(){
                        $.ajax({
                                type:'post'
                                ,url:'./lw.php'
                        });
                })
        });
 
        $(document).ready(function(){
                $("#rw").mousedown(function(){
                        $.ajax({
                                type:'post'
                                ,url:'./rw.php'
                        });
                })
        });
 
        $(document).ready(function(){
                $("#st").mousedown(function(){
                        $.ajax({
                                type:'post'
                                ,url:'./st.php'
                        });
                })
        });
       </script>
cs



# php 코드


1
2
3
4
5
<?
        $out = exec("sudo ./python/wiringPi/rc_test f");
        echo $out;
?>
 
cs


# C 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 
//left
void movLeft(){
        digitalWrite(M1_L,0);
        digitalWrite(M1_R,1);
        digitalWrite(M2_F,1);
        digitalWrite(M2_R,0);
}
 
//right
void movRigt(){
        digitalWrite(M1_L,1);
        digitalWrite(M1_R,0);
        digitalWrite(M2_F,0);
        digitalWrite(M2_R,1);
}
 
//stop
void movStop(){
        digitalWrite(M1_L,0);
        digitalWrite(M1_R,0);
        digitalWrite(M2_F,0);
        digitalWrite(M2_R,0);
}
 
//forw
void movForw(){
        digitalWrite(M1_L,0);
        digitalWrite(M1_R,1);
        digitalWrite(M2_F,0);
        digitalWrite(M2_R,1);
}
 
//back
void movBack(){
        digitalWrite(M1_L,1);
        digitalWrite(M1_R,0);
        digitalWrite(M2_F,1);
        digitalWrite(M2_R,0);
}
 
cs



# 실행





# 풀 코드


https://github.com/bcy3161/godHands


반응형

'리눅스 > 라즈베리파이' 카테고리의 다른 글

[방범 DIY] CCTV를 만들어보자 #2  (0) 2017.05.10
[방범 DIY] CCTV를 만들어보자 #1  (0) 2017.05.10
WiringPi 설치  (0) 2015.11.08
파이캠을 이용한 웹스트리밍 서버  (1) 2015.11.08
SSH 연결 구축  (0) 2015.09.24

WiringPi 설치

Posted by 백창
2015. 11. 8. 10:24 리눅스/라즈베리파이
반응형

# 개요


 GPIO를 컨트롤하기 위해 WiringPi를 설치하여 라즈베리파이를 제어해보자.



# 설치


 wiringPi를 다운받을 위치에서 github의 wiringPi소스를 다운받는다.


 git clone git://git.drogon.net/wiringPi


 wiringPi 폴더로 이동하여 설치를 진행한다.


 cd wiringPi

 ./build



# 확인


 다음 명령어를 통해 설치가 완료되었는지 확인할 수 있다.


 gpio -v


 readall 옵션을 통해 핀번호, 핀의 모드, GPIO이름 등 다양한 정보를 알 수 있다.


 gpio readall





# 컴파일


 소스 코드 작성 후 컴파일시 다음 명령어를 추가하여 컴파일한다.


 gcc -o 실행파일 소스파일 -lwiringPi






반응형

파이캠을 이용한 웹스트리밍 서버

Posted by 백창
2015. 11. 8. 10:20 리눅스/라즈베리파이
반응형

# 개요


 라즈베리파이에 사용되는 전용 카메라 파이캠(pi-cam)와 mjpg-streamer를 이용하여 손쉽고 빠르게 웹 스트리밍을 해보자.


# 파이캠 장착


 처음 파이캠을 들었을 때 어디에 꼽아야하는지 막막했다. 


 다음 사진과 같이 해당 부분을 눌러 파이캠의 연결선을 넣고 다시 닫아주도록 하자.





# mjpg-streamer 컴파일 및 설치


 mjpg-streamer를 설치하기에 앞서 영상관련 라이브러리와 컴파일에 필요한 cmake 패키지를를 설치하자


 sudo apt-get install git cmake libjpeg8-dev imagemagick -y


 mjpg-streamer 컴파일 시 필요한 헤더파일을 링크한다.


 sudo ln - s /usr/include/linux/videodev2.h /usr/include/linux/videodev.h


 mjpg-streamer를 설치하고자 하는 폴더로 이동하여 다음 명령을 통해 mjpg-streamer를 다운 받는다. 


 해당 패키지는 오픈소스 프로젝트로 다양한 버전의 mjpg-streamer가 존재한다. 


 본 포스팅에서는 적절한 fps 조절을 위해 다음 프로젝트를 사용하였다. 

 (fps 20~25 일 때 거의 동영상으로 느낄 수 있다)


 git clone https://github.com/jacksonliam/mjpg-streamer


 다운받은 폴더로 이동하여 컴파일.. 꽤 오랜 시간이 걸린다


 make -clean all


# 실행


매번 명령어를 사용하여 실행하기 어렵기에 실행 스크립트를 작성하도록 하자.


export LD_LIBRARY_PATH=.

export mjpg_PATH=/home/pi/godHands/mjpg-test/mjpg-streamer/mjpg-streamer-experimental

$mjpg_PATH/mjpg_streamer -i "$mjpg_PATH/input_raspicam.so -x 640 -y 360 -fps 20" -o "$mjpg_PATH/output_http.so -w $mjpg_PATH/www"


해당 소스를 그대로 붙여넣기를 하면 "가 제대로 안들어갈수도 있다.


환경변수 mjpg_PATH에 mjpg streamer가 설치된 폴더를 지정하고 mjpg_streamer를 실행한다.






# 결과





# 참조


http://www.rasplay.org/?p=7174


https://github.com/jacksonliam/mjpg-streamer/blob/master/README.md


반응형

'리눅스 > 라즈베리파이' 카테고리의 다른 글

[방범 DIY] CCTV를 만들어보자 #1  (0) 2017.05.10
GPIO 및 웹 서버를 이용하여 라즈베리파이 제어  (5) 2015.11.14
WiringPi 설치  (0) 2015.11.08
SSH 연결 구축  (0) 2015.09.24
라즈비안 설치  (0) 2015.09.23

[알고리즘] 동적계획법

Posted by 백창
2015. 10. 22. 14:47 자료구조&알고리즘/개념
반응형

# 동적계획법


 동적계획법은 분할정복법과는 정반대의 방식을 이용하여 문제를 해결한다. 동적계획법은 문제를 더 작은 문제로 분할한다는 점에서는 분할정복법과 비슷하지만 여기서는 작은 문제를 먼저 해결하고 저장하고 다른 계산에 그 저장된 결과를 이용한다.


 동적계획법은 상향식 접근 방법(bottom-up)이다. 계획이란 해답을 구축하는데 배열을 사용함을 의미한다.



# 예시


 파스칼의 삼각형이 비슷한 예시가 되겠다.


 원하는 결과를 얻기까지 결과값들을 배열에 저장하여 그 값을 다음 계산에 이용한다.


int bin(int n, int k){

index i, j;

int B[0..n][0,,k];


for( i = 0 ; i <= n ; i++ ){

for( j = 0 ; j <= min( i , k ) ; j++ ){

if( j == 0 || j == i )

B[i][j] = 1;

else

B[i][j] = B[i-1][j-1] + B[i-1][j];

}

}


return B[n][k];

}


반응형

'자료구조&알고리즘 > 개념' 카테고리의 다른 글

[알고리즘] 분할정복법  (0) 2015.10.12
[정렬 알고리즘] 시간복잡도  (0) 2015.10.12
Map 과 HashMap 차이  (0) 2014.12.26
[개념] 리스트  (0) 2014.11.04

[알고리즘] 분할정복법

Posted by 백창
2015. 10. 12. 20:08 자료구조&알고리즘/개념
반응형

# 분할정복법


 분할정복법은 문제를 2개 이상의 더 작은 문제들로 나누어 해결한다. 작은 문제가 여전히 크다면 더 작은 문제들로 계속해서 나눈다. 작은 문제에 대한 해답을 바로 얻을 수 있다면 원래 문제의 해답은 이 해답들을 통합하여 구할 수 있다.

 

  분할정복법은 하향식 접근 방법(top-down)이다. 즉, 문제의 맨 상위 사례의 해답은 아래로 내려가서 작은 사례에 대한 해답을 구함으로써 구한다.


  재귀 함수가 이에 해당한다.


# 예시


  실례로는 binary search가 있다.


  값을 찾기 위해 계속해서 반절로 문제를 쪼개어 해답을 찾는다.


index location(index low, index high) {

index mid;


if(low > high)

return 0;

else {

mid = (low+high)/2;

if( x == S[mid] )

return mid;

else if( x < S[mid )

return location(low, mid - 1);

else

return location(mid + 1, high);

}

}


반응형

'자료구조&알고리즘 > 개념' 카테고리의 다른 글

[알고리즘] 동적계획법  (0) 2015.10.22
[정렬 알고리즘] 시간복잡도  (0) 2015.10.12
Map 과 HashMap 차이  (0) 2014.12.26
[개념] 리스트  (0) 2014.11.04

[정렬 알고리즘] 시간복잡도

Posted by 백창
2015. 10. 12. 19:19 자료구조&알고리즘/개념
반응형

# 정렬 알고리즘 시간 복잡도


 

 최적

 평균

 최악

 퀵소트

 

 

 

 삽입정렬

  

 

 

 선택정렬

 

 

 

 버블정렬

 

 

 

 이진트리 정렬

 

 

 

 합병정렬

 

 

 


반응형

'자료구조&알고리즘 > 개념' 카테고리의 다른 글

[알고리즘] 동적계획법  (0) 2015.10.22
[알고리즘] 분할정복법  (0) 2015.10.12
Map 과 HashMap 차이  (0) 2014.12.26
[개념] 리스트  (0) 2014.11.04

SSH 연결 구축

Posted by 백창
2015. 9. 24. 10:57 리눅스/라즈베리파이
반응형

# 개요


라즈베리파이를 SSH로 연결하기 위한 작업을 해보자


# 방법


먼저 라즈베리파이의 IP를 확인하자 


ifconfig 명령어를 사용하여 IP를 확인하고 공유기에서 같은 IP를 할당하도록 설정해준다.


그리고 공유기의 포트포워딩 메뉴에서 다음과 같이 설정해준다.




외부 포트에는 접속에 사용할 포트번호를 입력한다.


내부 IP에는 현재 라즈베리파이의 IP를, 내부 포트에는 SSH포트인 22를 설정해준다


이제는 라즈베리파이에 SSH를 열도록 하자


sudo raspi-config 


명령어를 입력하여 다음 메뉴에서 SSH를 Enable 상태로 바꾸자







# 테스트




공인 IP를 통해서 접속 요청을 한다





반응형

라즈비안 설치

Posted by 백창
2015. 9. 23. 15:23 리눅스/라즈베리파이
반응형

# 개요


라즈베리파이에서 사용되는 OS인 라즈비안을 설치해보자



# 설치법


먼저 아래 사이트에서 SD카드 포맷터를 다운받는다.



SD카드를 포맷하고, 라즈베리파이 홈페이지에서 운영체제를 다운받는다





다운로드를 받고 압축을 풀면 다음 파일들이 폴더안에 있을 것이다.




해당 파일들을 그대로 SD카드로 복사하면 된다.


이제 SD카드를 라즈베리파이에 꼽고 라즈베리파이를 켠다




최상단의 라즈비안을 누르고 설치를 누르면 라즈비안 설치가 끝난다.


반응형

OSI 7계층

Posted by 백창
2015. 4. 24. 13:50 컴퓨터네트워크/개념
반응형


 OSI

 

 Open System Interconnection 의 약자로 서로 다른 컴퓨터나 네트워크간 상호 접속을 용이하게 하기 위해 ISO가 규정한 기본 모델로써 통신망을 통한 상호접속에 필요한 제반 통신절차를 정의하고 이 가운데 비슷한 기능을 제공하는 모듈을 동일계층으로 분할하여 7계층으로 분한할 것이다.


 각 계층마다 다른 계층과는 무관하게 자신의 독립적인 기능을 지원한다.



그림 출처 : http://blog.naver.com/suk91ko/220308372085




 OSI 7 구조

 


 7계층 

 응용계층

 6계층

 표현계층 

 5계층

 세션계층

 4계층

 전송계층

 3계층

 네트워크 계층

 2계층

 데이터링크 계층

 1계층

 물리계층


 OSI는 다음과 같은 7계층의 구조를 가지고 상위 4계층과 하위 3계층으로 나뉘어진다.



 물리 계층

 

 1계층부터 3계층까지는 하위계층으로 분류된다.

 데이터를 비트로 전환, 비트를 전기적 신호로 변환하여 실제 전송


 커넥터의 모양, 전송거리 등을 다룬다.



 데이터링크 계층

 

 물리적 주소를 구분하고 데이터의 전송형태를 결정, MAC주소로 통신할 수 있게 해준다.


 네트워크 접근방법, 통신 에러 등을 다룬다.



 네트워크 계층

 

 논리적 주소를 구분하고 목적지까지 최적경로를 결정


 예를 들어 라우터의 라우팅시 최적경로 결정을 들 수 있다.



 전송 계층 

 

 4계층인 전송 계층부터는 상위계층으로 나타낸다. 

 데이터 전송방식을 결정하고 포트번호를 구분


 전송방식에는 2가지 방법이 있다. 흔히들 알고 있는 TCP와 UDP 이다.


 TCP : 연결 지향형 방식이라고 한다. 데이터의 올바른 전송을 위해 확인 응답을 받는다. 따라서 신뢰도가 높다.

 UDP : 비연결 지향형 방식이다. 데이터의 전송에 확인응답을 요구하지 않는다. 따라서 신뢰성이 떨어지지만 빠르다는 장점이 있다.



 세션 계층

 

 통신 중 양 끝 단의 세션의 수립, 관리, 해제를 하며 시스템간의 상호작업을 조정



 표현 계층

 

 통신 중 양 끝 단의 데이터 형식에 대한 호환성을 제공, 서로 다른 형식을 변환 해주거나 공통 형식을 제공

 쉽게.. 확장자 같은거 txt, avi, ..



 응용 계층

 

 사용자와 컴퓨터간의 연결, UI를 제공

 사용자는 어플리케이션을 이용해 필요한 영역과 대화 할 수 있다.



출처 : http://terms.naver.com/entry.nhn?docId=2071856&cid=42345&categoryId=42345

http://blog.naver.com/suk91ko/220308372085

반응형

'컴퓨터네트워크 > 개념' 카테고리의 다른 글

[용어] 터널링  (0) 2014.10.02
[용어] ARP  (0) 2014.08.11
[용어] DHCP  (0) 2014.08.01