'Log'에 해당되는 글 2건

Programming/Microsoft SQL Server
Insert, Update, Delete를 통해 Table이 변경될때는 우선 내용을 일시적으로 담고 있는 임시Table이 Server의 Merory상에 생성되고 변경이 완료되면(해당 변경구문의 Transaction이 종료되는 시점) 그 즉시 다시 사라지게 됩니다. 이때 Output(보통 Trigger에서 많이 사용되는)을 사용하면 Table이 변경될때의 Data를 일시적으로나마 확인할 수 있게 됩니다.

아래는 Output을 통해 변경 Data를 확인하는 예제입니다.

Insert Into HumanResources.Department
Output inserted.*
Values('Executive', 'Executive General and Administration', getdate())


Update HumanResources.Department
Set Name = 'Management',
 GroupName = 'Management Group'
Output deleted.*, inserted.*,
Where DepartmentID = 16

Update의 경우에는 Update를 위한 별도의 임시Table이 존재하지 않고 이와 관련된 Inserted와 Deleted Table이 생성됩니다.

즉 변경하기전 Data는 Deleted에 또한 변경할 Data는 Inserted에 담게 되는 것입니다.(즉, Update는 Data삭제와 추가를 병행함으로서 실질적인 변경작업을 수행합니다.)


Delete From HumanResources.Department
Output deleted.*
Where DepartmentID = 16


Select문에서도 사용되는 * 문자는 해당 Table의 모든 열을 의미합니다. 만일 별도의 열값만 조회할 필요가 있다면 다음과 같이 * 대신 열이름을 지정해 줄 수도 있습니다.

Insert Into HumanResources.Department
Output inserted.Name, inserted.GroupName
Values('Executive', 'Executive General and Administration', '1998-06-01 00:00:00.000')


Output을 활용하면 편법이긴 합니다만 Table이 변경되는 이력(일종의 Log)을 남겨두는 용도로 쓰이기도 합니다.

예를 들어 HumanResources.Department Table에서 Data가 삭제될때마다 삭제되는 Data의 이력을 남겨두고자 한다면 우선 HumanResources.Department Table과 동일한 형태의 Log Table을 만들고

Create Table HumanResources.Department_DeleteLog(
 DepartmentID Smallint,
 Name   nVarChar(50),
 GroupName  nVarChar(50),
 ModifiedDate DateTime
)

Delete 문으로 HumanResources.Department Table을 삭제시 Output을 이용해 위에서 만든 Log Table에 삭제되는 Data를 담아두는 것입니다.

Delete From HumanResources.Department
Output deleted.* Into HumanResources.Department_DeleteLog
Where DepartmentID = 16

Output을 통해 HumanResources.Department_DeleteLog의 Log Table에 삭제되는 Data를 저장합니다.

Select *
From HumanResources.Department_DeleteLog

삭제된 이력을 확인합니다.


다만 다음과 같이 임시Table을 만드는 동시에 Data를 저장하는 방법은 통하지 않으니 Log Table을 미리 만들어 둬야 합니다.

Select *
Into #Temp
From HumanResources.Department

'Programming > Microsoft SQL Server' 카테고리의 다른 글

[SQL] Coalesce 와 Nullif  (0) 2010.09.14
[SQL] xact_abort와 Transaction  (0) 2010.09.13
[SQL] Output으로 변경Data 확인하기  (0) 2010.09.10
[SQL Server] SQLCMD  (0) 2010.09.09
[SQL] 케이스(Case)  (0) 2010.09.07
[SQL] 예외처리(try ~ catch)  (0) 2010.09.06
0 0
Programming/C C++
1. 수학함수 일반

아래 함수사용시 math.h Header File선언이 필요합니다.

 함수  사용  설명
 sin()  sin(d);  sin값을 double형으로 반환합니다.
 cos()  cos(d);  cosin값을 double형으로 반환합니다.
 tan()  tan(d);  tangent값을 double형으로 반환합니다.
 exp()  exp(d);  ex값을 double형으로 반환합니다.
 expl()  expl(d);  ex값을 long double형으로 반환합니다.
 log()  log(d);  자연log(밑이e)값을 double형으로 반환합니다.
 log10()  log10(d);  상용log값을 double형으로 반환합니다.
 frexp()  frexp(d, *i);  d에서 mantissa(가수부)와 exponent(지부수)로 나누고 mantissa를 double형으로 반환합니다.
 ldexp()  ldexp(d, i)  d*2i 형식으로 계산을 수행합니다.

각 함수에서 d는 double형 인수를 의미하며 *i는 int형 Pointer, i는 int형 인수를 의미합니다.

#include <stdio.h>
#include <math.h>

main()
{
  double d1, d2;
  int i;
 
  printf("%f\n", sin(45*3.14/180));
  printf("%f\n", exp(-4));
  printf("%f\n", log(4));
 
  d1 = 5.0;
  d2 = frexp(d1, &i);
 
  printf("%f\n", d1);
  printf("%f\n", d2);
  printf("%d\n", i);
 
  printf("%f\n", ldexp(10,5));
}


sin(), cos(), tan()함수에서 인수는 각도가 아닌 Radian(호도)값입니다. 따라서 각도를 인수로 할 경우 d*3.14/180형식을 갖추어 Radian으로 변환하여야 합니다.


2. 절대값

아래 함수사용을 위해서는 stdlib.h(abs, labs)와 math.h(fabs) Header File선언이 필요합니다.

 함수  사용  설명
 abs()  abs(i);  int형 data의 절대값을 반환합니다.
 labs()  labs(l);  long형 data의 절대값을 반환합니다.
 fabs()  fabs(d);  double형 data의 절대값을 반환합니다.

각 함수의 인수에서 i는 int형, l은 long형, d는 double형 인수를 의미합니다.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

main()
{
  printf("%d\n", abs(-123));
  printf("%ld\n", labs(-123456789));
  printf("%f\n", fabs(-12.23));
}



3. 나머지

아래 함수 사용을 위해서는 stdlib.h(div(), ldiv())와 math.h(fmod()) Header File선언이 필요합니다.

 함수  사용  설명
 div()  div(ni, di);  분자(ni)와 분모(di)사이에 몫과 나머지값을 반환합니다.(int형)
 ldiv()  ldiv(nl, dl);  분자(nd)와 분모(dd)사이에 몫과 나머지값을 반환합니다.(long int형)
 fmod()  fmod(nd, dd);  double형 data의 나머지값을 반환합니다.

각 함수의 인수에서 ni, di는 int형, nl, dl은 long int형, nd, dd는 double형 인수를 의미합니다.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

main()
{
  div_t i;
 
  i = div(15, 4);
 
  printf("몫 %d\n", i.quot);
  printf("나머지 %d\n", i.rem);
 
  printf("%f\n", fmod(12.45, 2.38));
}


div()함수와 ldiv()함수는 몫과 나머지값을 동시에 반환하기 때문에 단일 형식의 변수로는 이 함수의 반환값을 받아올 수 없습니다.  따라서 div()함수인 경우 div_t로 ldiv()함수인 경우 ldiv_t로 변수를 선언하고 값을 받아와야 합니다.

이때 값을 받은 변수는 quot에는 몫을 rem에는 나머지값을 저장하도록 합니다.


4. 제곱근 처리

아래 함수 사용을 위해서는 math.h Header File선언이 필요합니다.

 함수  사용  설명
 pow()  pow(d1, d2);  d1의 d2승값을 double형태로 반환합니다.
 sqrt()  sqrt(d1);  d1의 제곱근값을 double형태로 반환합니다.

각 함수의 인수에서 d1, d2는 double형 인수를 의미합니다.

#include <stdio.h>
#include <math.h>

main()
{
  printf("%f\n", pow(5.5, 2.0));
  printf("%f\n", sqrt(12.34));
}



5. 소수점 처리

아래 함수 사용을 위해서는 math.h Header File선언이 필요합니다.

 함수  사용  설명
 ceil()  ceil(d);  double형의 d값에서 소수점 이하를 반올림한 값을 반환합니다.
 floor()  floor(d);  double형의 d값에서 소수점이하를 버린값을 반환합니다.
 modf()  modf(d, *d);  double형의 d값을 정수와 소수로 분리합니다.

각 함수의 인수에서 d는 double형, *d는 double형 Pointer인수를 의미합니다.

#include <stdio.h>
#include <math.h>

main()
{
  double d;
 
  printf("%f\n", ceil(12.34));
  printf("%f\n", floor(12.34));
 
  printf("소수부 : %f\n", modf(12.34, &d));
  printf("정수부 : %f\n", d);
}


modf()함수에서 소수부분은 직접반환하고 정수부분은 Pointer변수에 저장합니다.

0 0
1
블로그 이미지

클리엘