기본 콘텐츠로 건너뛰기

라벨이 Function인 게시물 표시

ORACLE서버간 복사를 위한 팁들..

오라클은 sql을 실행하여 DDL SQL을 만든다거나 하는 것들이 가능한데 문제는 파일로 저장하면 애매한 부분에서 줄넘김이 되면서 에러를 발생시킨다.  이번에 이동해야 하는건 테이블만 12만개나 있어서  하나식 보면서 할 수가 없어 찾아보니.. 여러가지 옵션들이 있어  내 나름대로 정리해 봤다.  #get_ddl.sql set  long  100000 set  head  off set  feed  on set  wrap  on set  linesize  3200 set  pagesize  0 set  trimspool  on set  longchunksize  1024 spool insertout.txt select dbms_metadata.get_dll('TABLE', 'MyTablename', 'MyOwner'); exit long : 한 필드에 표시되는 문자 수. 적으면 내용이 중간에 잘린다.  head off : 필드명을 없앤다.  feed on : 한 필드 내의 줄넘김을 표시한다. off면 한줄만 표시되면서 다음 줄 이후는 잘린다.  wrap on : ?? 기억이;; linesize 3200 : 한 줄에 3200글자까지 지원.. 이게 작으면 오른쪽이 잘린다.  pagesize 0 : 한 줄에 표현하는 페이지.. 숫자가 커도 별로 의미 없이 공백만 생기므로 0으로 설정 trimsppo on : 이건 그냥 붙여봤는데 아직 테스트 안함. lognchunksize 1024 : 오른쪽 글자 잘림을 막아줌(linesize가 있어도 잘리는 경우 이것까지 넣으니까 다음줄로 안넘어가고 옆으로 잘 붙어준다.) spool filename.sql : filename.sql 파일로 출력해준다.  이렇게 처리하면 sql만 들어가기 때문에  echo "exit" >> filename.sql  등으로 exit을 넣어줘야 cli로 실행하는 경우 먹통이 되지 않는다.  Procedure, Function을 복사하

[SQL Server] Rank() 함수로 배열을 쉽게..

MS-SQL Server 2005부터 서포트 합니다. 온라인 게임의 통계등에 많이 사용하는 순위나 랭킹 서비스에 많이 활용하는 함수입니다. USE AdventureWorks; GO SELECT i.ProductID, p.Name, i.LocationID, i.Quantity     ,RANK() OVER       (PARTITION BY i.LocationID ORDER BY i.Quantity DESC) AS 'RANK' FROM Production.ProductInventory i       INNER JOIN Production.Product p           ON i.ProductID = p.ProductID ORDER BY p.Name; GO 여기서 위의 예제처럼 Partition By 로 필드를 구분 지으면 지역별(i.LocationID)로 랭킹을 나눈다는 뜻이다. 서울, 부산의 두 지역이 있으면 서울에서의 랭킹과 부산에서의 랭킹이 서로 다르게 나타난다. Parition 뒤의 Order By 는 Rank를 순서짓는 순서가 된다.   즉, 온라인 게임에서 많이 사용하는 캐릭터 테이블에서.. 서버별, 직업별로 높은 레벨, 높은 경험치, 신규 캐릭터 순으로 랭킹을 만들어보면.. 테이블 : tCharacter 서버 : servername 직업 : jobname 레벨 : level 경험치 : exppoint 생성일 : regdt select servername, jobname, level, exppoint, regdt   , rank() over       (partition by servername, jobname         order by level desc, exppoint desc, regdt desc) as Rank from tCharacter 이런식으로 구별지어 랭킹을 만들 수 있답니다. ^^ http://msdn.microsoft.com/ja-jp/library/ms176102.aspx