프로시저는 PL/SQL을 통해 만들어지고 특정 작업을 수행하는 서브 프로그램이다. 자주 사용되는 SQL문을 DB 객체로 생성해서 저장한 후 사용시에 프로시저명을 호출해서 사용한다. PL/SQL에서 FUNCTION 은 리턴값을 반환하는데 반해 프로시저는 지정된 작업을 수행 후에 결과값을 반환할 수도 있고 반화나지 않을 수 있다. FUNCTION과 프로시저의 차이점은 FUNCTION은 SQL문 내부에서 사용할 수 있지만, 프로시저는 EXEC 또는 EXECUTE의 실행문을 통해서 사용된다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE OR REPLACE PROCEDURE "프로시저명" (
  PARAMETER IN|OUT DATATYPE
 
)  IS
 
  
  --변수선언부
  
  
  BEGIN
 
  --처리내용
 
  EXCEPTION 
  --예외처리부분
          
  END;
 
cs

CREATE OR REPLACE PROCEDURE : 프로시저를 생성 또는 이미 있으면 기존 프로시저를 대체

프로시저명 : 생성할 프로시저이름

파라메터 : 프로시저에게 전달할 파라미터 이름과 데이터 타입을 명시한다.

IN  : 변수값을 입력받을때 사용

OUT : 프로시저 처리 후 리턴할 변수명

INOUT : 파라미터로 변수값을 받고 프로시저 처리후 리턴할 변수명

 

변수 선언 부 : 사용할 변수를 명시한다.

 

 

 

출처:실전 DB 모델링과 SQL for ORACLE



출처: http://kkiuk.tistory.com/16 [평범한 개발자의 이야기]

'DB' 카테고리의 다른 글

DataSet DataTable DataGridView  (0) 2019.03.25
DB 정규화  (0) 2019.01.09
statement와 preparedStatement의 차이  (0) 2019.01.05
left, right, inner, outer, natural join  (0) 2018.11.20
DB 성능 순서  (0) 2018.09.20

함수 호출시 메모리를 통으로 복사해서 사용하면 너무 느리니깐요. 메모리 위치만 주고 받으면 빠르죠.


포인터란 자료가 저장되는 기억장치의 기억주소를 가리키는 지시자로써 포인터는 다른 기억장소의 자료를 참조하는데 사용되는 데이터입니다.

 

1. 포인터를 써야 하는 이유

 

어떠한 변수이든지 어떠한 버퍼를 할당 받아서 사용하는데모든 변수의 저장과 참조는 변수가 저장될 혹은 저장된 주소를 알아야 가능하다그래서 컴퓨터는 변수를 참조할 때 그 변수가 저장되어 있는 주소를 먼저 찾아내고 그 주소가 가리키는 내용을 참조하게 된다이렇게 변수의 주소를 저장하거나 사용하기 위한 변수가 포인터이다.

포인터를 사용하면 간결하고 효율적인 표현과 처리가 가능하고 더 빠른 기계어 코드를 생성할 수 있으며복잡한 자료 구조(배열구조체 등)와 함수의 쉬운 접근이 가능하다또한 포인터를 사용하지 않았을 때 코드로 표현할 수 없는 경우가 생길 수 있다.

 

2. 포인터를 사용하면 어떤 장점이 있을까?

 

메모리 주소를 참조해서 다양한 자료형 변수들의 접근과 조작 용이


예제_

#include <stdio.h>

int main() 

int a=5; 

int *b; 

b = &a; 

printf("a = %d, &a = %d, b = %d, *b = %d\n", a, &a, b, *b); 

*b += 5; 

printf("a = %d, &a = %p, b = %p, *b = %d\n", a, &a, b, *b); 

              return 0; 

}


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

a = 5, &a = 1245052, b = 1245052, *b = 5 

a = 10, &a = 0012FF7C, b = 0012FF7C, *b = 10


위 예제에서 보면 정수형 변수 a 5로 초기화되고 정수형 포인터 변수 b a의 시작주소가 대입됩니다

따라서 주소 b가 가리키는 내용인 *b 3이 될 것입니다이렇듯이 변수들의 접근에 용이합니다.

 

메모리 주소를 참조하여 배열과 같은 연속된 데이터에 접근과 조작 용이

동적 할당된 메모리 영역(힙 영역)에 접근과 조작 용이

한 함수에서 다른 함수로 배열이나 문자열을 편리하게 보낼 수 있음

복잡한 자료구조를 효율적으로 처리

배열로 생성할 수 없는 데이터를 생성

메모리 공간을 효율적 사용

- call by reference에 의한 전역 변수의 사용을 억제

 

3. 포인터의 단점

 

포인터 변수는 주소를 직접적으로 컨트롤하기 때문에 예외 처리가 확실하지 않을 경우 예상치 못한 문제가 많이 발생. ( 널 포인트 같은 경우에 바로 접근할 경우 예외 발생)

선언만 하고 초기화를 하지않을 경우 쓰레기 주소를 가리키고 있기 때문에 사용에 주의해야 함.

포인터 변수는 주소를 직접 참조하기 때문에 의도하지않게 원본의 값이 수정 될 수 있다.

오류를 범하기 쉽고 기교적인 프로그램이 되기 쉽다.

프로그램의 이해와 버그 찾기가 어렵다.

메모리 절대 번지 접근 시 시스템 오류를 초래한다.

 

 하지만 단점 보다는 장점이 더 많아서 포인터를 사용한다고 한다.

 

 

4. 포인터와 배열의 차이

 배열과 포인터는 완전 같지는 않다고 한다그럼 차이점은 무엇일까?

 

포인터는 변수이지만 배열은 상수이다.

         int *p와 int arr[n]이 있다고 할 때, p는 고유의 메모리를 차지하고 있고 언제든지 다른 대상을 가르킬 수 있지만 arr는 선언 할 때 그 위치가 이

미 고정되므로 다른 대상을 가리킬 수 없다. arr로는 오로지 배열의 선두 번지를 읽을 수 있을 뿐이다.


가리키는 배열의 크키는 동적으로 결정할 수 있지만 arr이 가리키는 배열의 크기는 선언할 때 정적으로 결정된다.
 
고정된 길이의 배열이 필요하면 int arr[n]; 선언문으로 배열을 생성하는 것이 편리하고 가변길이의 배열이 필요하면 int *형의 포인터 변수를 선언한    malloc으로 할당해서 사용해야 한다포인터로 할당한 배열은 실행 중에라도 realloc으로 크기를 재할당하여 변경할 수 있다.
 
- 배열은 그 자체가 크기 때문에 함수의 인수로 전달할 수 없지만 포인터는 대상체가 무엇이든간에 4바이트와 크기밖에 차지하지 않으므로 함수로 전달할 수 있다
 
그래서 배열을 함수로 전달할 때는 반드시 포인터를 사용해야 한다

- 동작의 속도 차이가 있다
 
배열은 매번 배열선두에서부터 출발하지만 포인터는 대상체로 직접 이동해서 바로 읽으므로 액세스 속도가 빠르다. *p p가 가리키는 곳을 바로 읽지만ar[n] *(ar+n)으로 일단 번지를 더한 후 읽어야 하므로 조금 느리다포인터가 배열보다 두배 정도 빠르다.


출처 : http://blog.hyomin.xyz/10

'프로그래밍' 카테고리의 다른 글

C# , C++, JAVA 비교  (0) 2018.09.22

https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all

'DB > Oracle' 카테고리의 다른 글

DB 쿼리  (0) 2018.12.25
Statement 대신 preparedStatement 사용하는 이유  (0) 2018.12.25
프로젝트 DB 설계  (0) 2018.09.05
SQL실습을 위한 Oracle XE 11g 설치 및 준비  (0) 2018.07.27
sqldeveloper 테스트 실패  (0) 2018.07.27

+ Recent posts