반응형

19.3 기본 Built-in Function


19.3.1 개요

함 수 명            유 형                    리턴값                                                                                    적용버전

---------------------------------------------------------------------------------------------------------
abs                  수학                    표현식의 절대값                           

ascii                문자열                 표현식의 첫 문자에 대한 ASCII 코드

avg                  집계                    모든 고유 값의 산술 평균

ceiling              수학                    지정된 값보다 크거나 같은 최소 정수

char                 문자열                 정수와 대등한 문자
charindex         문자열                 표현식의 시작 위치를 나타내는 정수를 반환합니다.
char_length       문자열                 표현식의 문자 수
col_length         시스템                 정의된 열의 길이
convert             데이터 유형변환    다른 데이터 유형 또는 datetime 표시 형식으로 변환된 지정 값
count                집계                   null이 아닌 고유한 값의 수
current_date      날짜                    현재 날짜를 반환합니다.                                                                12.5.1
current_time       날짜                   현재 시간을 반환합니다.                                                                12.5.1
datalength         시스템                 지정된 열 또는 문자열의 실제 바이트 단위 길이
dateadd            날짜                    주어진 년도, 분기, 시간 또는 기타 날짜 부분을 지정된

                                                 날짜에 더하여 만든 날짜
datediff             날짜                    두 날짜 표현식 간의 차이
datename          날짜                   날짜 표현식에서 지정된 부분의 이름
datepart            날짜                   날짜 표현식에서 지정된 부분의 정수 값
day                  날짜                   지정한 날짜의 datepart에서 날짜를 나타내는 정수를 반환합니다.            12.5.0.3
floor                 수학                   지정된 값보다 작거나 같은 최대 정수
getdate             날짜                   시스템의 현재 날짜 및 시간
hextoint            데이터유형변환     지정된 16진수 문자열에 해당하는 플랫폼 독립 정수
isdate               시스템                Expression이 날짜형식인지 확인합니다.                                              15.0.1
isnull                시스템                expression1이 NULL로 계산되는 경우 expression2 에 지정된 값으로

                                                대체합니다.
isnumeric          시스템                Expression이 숫자형인지 확인합니다.                                                  15.0.1
ltrim                  문자열                선두 공백이 제거된 지정 표현식
left                    문자열               문자열의 왼쪽 끝에서부터 지정한 수만큼의 문자를 반환합니다.                12.5.0.3
len                    문자열               지정한 문자열 표현식의 바이트 수가 아닌 문자 수를 반환합니다.              12.5.0.3

                                                이 때 후미 공백은 제외됩니다.
max                  집계                   열의 최고 값
min                   집계                   열의 최하 값
month                날짜                  지정한 날짜의 datepart에서 월을 나타내는 정수를 반환합니다.                 12.5.0.3
newid               시스템                Globally Unique ID’s (GUID) 반환                                                        12.5.0.3
patindex            문자열                텍스트 및 이미지 지정된 패턴이 처음 발생한 시작 위치
pi                     수학                   상수 값 3.1415926535897936
power               수학                   지정된 숫자를 주어진 거듭제곱으로 증가시키는 경우 결과 값
radians             수학                   지정된 각도의 라디안 단위 각도 크기
rand                 수학                    지정된 시드 값을 사용하여 생성된 0과 1 사이의 임의 값
replicate            문자열                지정된 횟수만큼 반복되는 표현식으로 구성되는 문자열
reverse             문자열                역순으로 열거된 문자의 지정 문자열
right                  문자열                오른쪽에서 지정된 수의 문자를 시작하는 문자 표현식의 일부
round                수학                   주어진 소수점 자리로 반올림된 지정된 숫자의 값
rtrim                  문자열                후미 공백이 제거된 지정 표현식
space               문자열                지정된 수의 단일 바이트 공간으로 구성되는 문자열
square              수학                   float로 표현한 지정 값의 제곱근을 반환합니다.                                        12.5.0.3
sqrt                   수학                   지정된 숫자의 제곱근
str                    문자열                지정된 숫자와 대등한 문자
str_replace        문자열                첫 번째 문자열 표현식 내에 있는 두 번째 문자열 표현식의 인스턴스를          12.5.0.3

                                                세 번째 표현식으로 대체합니다.
stuff                  문자열               특정 문자열에서 지정된 수의 문자를 삭제하고 다른 문자열로 바꾸어

                                                만들어진 문자열
substring           문자열               다른 문자열에서 지정된 수의 문자를 추출하여 만들어진 문자열
sum                  집계                   값 총계
upper                문자열                지정된 문자열과 대등한 대문자
year                  날짜                   지정한 날짜의 datepart에서 연도를 나타내는 정수를 반환합니다.                   12.5.0.3



19.3.2 사용법

select abs(-1)
select ascii("a")
select avg(advance), sum(total_sales) from titles where type = "business"
select ceiling(123.45)
select char(42)
select charindex("der", "wonderful")
select char_length(notes) from titles where title_id = "PC9999"
select convert(integer, 0x00000100)
select convert(varchar, getdate(), 23)

표 1) 년도를 char 또는 varchar로 변경할 때 사용되는 옵션값
년도 2자리                                년도 4자리                                형식

----------------------------------------------------------------------------------------------------------
- 또는 0                                    100                                        Default
                                                                                            mon dd yyyy, hh:mm AM (or PM)
1                                              101                                        USA mm/dd/yy
2                                              102                                        SQL standard yy.mm.dd
3                                              103                                        English/French dd/mm/yy
4                                              104                                        German dd.mm.yy
5                                              105                                        dd-mm-yy
6                                              106                                        dd mon yy
7                                              107                                        mon dd, yy
8                                              108                                        HH:mm:ss
- 또는 9                                     109                                        Default + milliseconds mon dd yyyy hh:mm:sss AM (or PM)
10                                             110                                        USA mm-dd-yy
11                                             111                                        Japan yy/mm/dd
12                                             112                                        yymmdd
13                                             113                                        yy/dd/mm
14                                             114                                        mm/yy/dd
15                                             115                                        dd/yy/mm
16                                             116                                        mon dd yy HH:mm:ss
17                                             NONE                                    hh:mmAM
18                                             NONE                                    HH:mm
19                                             NONE                                    hh:mm:ss:zzzAM
20                                             NONE                                    hh:mm:ss:zzz
21                                             NONE                                    yy/mm/dd
22                                             NONE                                    yy/mm/dd
23                                             NONE                                    yyyy-mm-ddTHH:mm:ss


select current_date()
select current_time()
select datalength(col1) from table1
select dateadd(hh, 24, "4/1/1979")
select datediff(yy, convert(date, "4/1/1999"), convert(date, "4/1/2000"))
year : yy
quater : qq
week : wk
day : dd
dayofyear : dy
weekday : dw
hour : hh
minute : mi
second : ss
millisecond : ms
select datename(mm, getdate())
select datepart(month, getdate())
select day(getdate())
select floor(123.45)
select getdate()
select hextoint ("0x00000100")
select isdate("20001231")
select isnull(price,0) from titles
select isnumeric("12345")
select ltrim(" aaa")
select left("abc", 1)
select len("abcdefg")
select max(discount) from salesdetail
select min(discount) from salesdetail
select newid(), newid(1), newid(0x0)
select au_id, patindex("%circus%", copy) from blurbs
select pi()
select power(2, 3)
select radians(2578)
select rand()
select replicate("abcd", 3)
select reverse("abcde")
select right("abcde", 3)
select round(123.4545, 2)
select rtrim("aaa ")
select "aaa" + space(5) + "bbb"
select square(5)
select sqrt(25)
select str(12345.1234, 10, 4)
select str_replace("cdefghi","def","yyy")
select stuff("abc", 2, 3, "xyz")
select au_lname, substring(au_fname, 1, 1) from authors
select avg(advance), sum(total_sales) from titles where type = "business"
select upper("abcd")
year("11/02/03")




출처 : www.dbguide.net - ase 프로그래밍 가이드

반응형
1. 소개
      
          1) 기본적으로 생성되는 데이터베이스(4개외에는 따로 생성한 디비들)
            - master : 서버 전체에 대한 오브젝들의 정보를 가지고 있는 디비
            - model : 이후 생성될 사용자데이타베이스의 모델이 되는 디비
            - sybsystemprocs : 스토어프로시져가 쌓이는 디비
            - tempdb : 임시공간으로 활용하는 곳
          2) pubs2 : 샘플 데이터베이스를 생성하는 스크립터
            - UNIX : $SYBASE_HOME/scripts/installpubs2
            - NT : $SYBASE_HOME/scripts/instpbs2.sql
          3) T-sql
            - isql -U로그인아이디 -P패스워드 -s서버 -i스크립터명 -o결과저장화일명
            - 표준 ansi-sql에 위배되는지 검사하기
              set fipsflagger on/off (검사하기/안하기)
              예) select type, avg(price) from titles => 사이베이스는 그냥 반복해서 평균뿌림.
              On하면 에러메세지 나오고 내용출력
            - isql안에서 유닉스명령을 수행하려면 : !!
              예) 1> !!isql -Usa -P -iaaa.sql : aaa.sql 스크립터문을 수행.
            - 디비 이동시 : 꼭 go를 밑에 넣어주어야 함.
              > use 디비명
              > go
            - 이전 입력글을 에디팅하여 다시 수행시 :
              > vi
            - 주석문
              > -- sample test 또는 /* 주석 */
          4) SQL Advantage client
            - 설정 : dedit를 이용하여 서버이름을 정하고 IP주소와 포트를 지정해줌
            - 연결 : 접속시 위에서 설정한 서버이름을 선택하고 아이디와 패스워드입력.

       2. 테이블 생성 및 수정, 관리
      
          1) 테이블 생성(DDL)
            - 250개의 칼럼 지정 가능
            - 정수타입 : tinyint, smallint, int, numeric(p,s), decimal(p,s)
              예) 123456.789 : numeric(8,2) => 123456.79,
                               numeric(10) => 123457, numeric(8,-2) => 123500
                               numeric(8,3) => 에러,   numeric(7,2) => 에러
            - 실수타입 : float(p), double precision, real
            - money타입 : money, smallmoney
            - 날짜타입 : datetime, smalldatetime
            - 문자타입 : char(n), nchar(n), varchar(n), nvarchar(n), text
              예) nchar는 national character로 언어별 문자수를 크기지정
                  한글버젼의 경우 char(5)=5bytes, nchar(5)=10bytes
              cf) select @@ncharsize : 현재 버전의 문자크기 구하기
              cf) char,varchar는 max 255, text는 max 2G
            - binary타입 : bit, binary(n), varbinary(n), image(2G까지)
            - 새로운 타입 지정 ( sp_addtype / sp_droptype )
              예) sp_addtype  typ_ch_pub_id, "char(4)", null
                ""를 넣은 이유는 ()가 있기때문
                예) sp_droptype typ_ch_pub_id
                예) sp_rename typ_ch_pub_id, new_typ_ch_pub_id
                    이미 typ_ch_pub_id라는 타입을 쓰고 있어도 변경 가능.
            - Identity : 시스템이 unique한 식별자로 자동 증가하는 칼럼의 유형
              (1) numeric타입 칼럼만 가능
              (2) drop 되어야 다시 시작(delete 소용없음)
              (3) 한 테이블에 꼭 하나만들어가고 갱신이 안됨.
              (4) 입력시 지정할 수 없으나 필요에 따라 지정가능
                  예) set identity_insert 테이블명 on/off
            - 칼러이름 변경시
              예) sp_rename  "aaa.a" ,  aa : 중간에 ""는 사이에 . 이 있기 때문
            - default : 기본 값은 지정. Pk는 디폴트 지정 안됨.
              예) 수정시 / 새로 지정시
              > alter table publishers
              > replace city default "Springfield"
            - null 지정 : sybase는 기본적으로 not null. 따라서 null은 꼭 기술해주어야 함.
          2) 테이블 권한 부여/박탈
            - grant [select/insert/update/delete/reference/all] on 테이블명 to 유저
              예) grant select on emp  to cel, kimds (to public : 누구에게나)
            - revoke [select/insert/update/delete/reference/all] on 테이블명 from 유저
              예) revoke select on emp  from cel, kimds (from public : 누구에게나)
          3) 테이블 수정 (칼럼 추가는 되는데 삭제는 안됨)
            - 수정
             > alter table publishers add address varchar(40) null, country varchar(40) null
            - 삭제 : 임시테이블에 넣어놓고 삭제후 다시 입력하기
             > select * into ccc_backup from ccc (ccc에 데이터가 없어도 ccc_backup생성됨)
             > drop  table ccc
             > create table ccc ......
             > insert ccc select a,b,c from ccc_backup
          4) 데이터 수정 : sybase에서 있는 기능만 설명
            - 두 테이블을 조인하여 수정 가능. 단, 한 테이블의 내용만 수정가능
             > update titles set price=price * $0.90
             > from titles t, publishers p
             > where t.pub_id=p.pub_id and p_state="CA"
            - 오라클의 decode와 유사한 case 구문 : 단 값중에 하나라도 null아닌 값이 있어야함.
              case [필드명]
              when 조건1 then 값1
              when 조건2 then 값2
              else 값3
              end
              예) update titles set price=
                  case when type="business" then price*$1.3
                  else price
                  end
          5) 데이터 삭제 : sybase에서 있는 기능만 설명
            - 롤백이 가능한 삭제
              > delete titles from titles t, publishers p
              > where t_pub_id=p.pub_id and p.state="CA"
            - 롤백이 안되는 삭제 ( select into도 롤백안됨 )
              > truncate table publishers
          6) 데이터 조회
            - 조회
              > select type, avg(price) from titles
              > where type not in ("mod_cook","trad_cook")
              > group by type
              > having avg(price) > $12.00
              > order by type
            - view 조회 : 수정시 뷰가 항목들이 한 테이블안에 존재하면 수정도 가능
              > create view vw_cali_authors
              > as
              > select au_id, au_lname, au_fname from authors
              > where state="CA"
              > with check option    => state가 꼭 "CA"이어야만 수정/추가됨.

       3. 인덱스
      
          1) 인덱스 생성/ 삭제
            - create index 인덱스명 on 테이블명(칼럼명1, 칼럼명2)
            - drop index 테이블명.인덱스명 ( 꼭 테이블명을 기술해주어야 함 )
          2) 인덱스 구분
            - clustered  index : 인덱스키값을 기준으로 테이블을 저장순서를 정렬하여 기록하는
            방식으로 자주 수정이 일어나는 테이블에는 부적절. 기본적으로 한테이블에 하나만 존재하며
            PK에 의해 생성되는 인덱스테이블은 기본적으로 해당 방식으로 이루어짐.
            - nonclustered  index : 실제 데이터 저장순서와는 상관없이 키값과 주소값으로 이루어진
            인덱스테이블을 기준으로 b+tree 검색을 하여 데이터 조회. 여러 개 가능.

       4. 임시 테이블
      
          1) Shareable Temporary Table : tempdb에 생성하는 테이블. 서버가 reboot하면 사라짐.
            - use tempdb하여 create table aaa 하면 됨. 누구나 접근 가능.
          2) Session-specific Temporary Table : 해당 session이 살아있는 동안만.
            - create table #aaa ( a  int null, b  char(2) null )
            - #뒤에 나오는 테이블명은 13자까지. 만든 유저만 접근 가능.
          3) 시스템 테이블들
            - select name,type from sysobjects : 만들어진 모든 시스템 오프젝트명과 타입나옴
            - 타입 : D(default) R(rule) P(produre) TR(trigger) S (system) U(user table) V(view)

       5. Constraint
      
          1) check : 입력값의 조건을 걸어줌 (예: p_id char(4) null check(p_id like "99[0-9][0-9]") )
            (주의할 점)
            > create table publishers (
            > pub_id   char(4) not null,
            > state     char(2) default "OK" null,                       =>조건 1
            > constraint chk_state check ( state in ("CA","OR","WA") )   =>조건 2
            > )
            > insert into publishers(pub_id) values("9909")  => 에러가 남(조건 1,2가 틀림)
          2) primary key, unique
          3) foreign key :  constraint ref_aaa foreign key(칼럼명) references 테이블명(칼럼명)
          4) constraint 추가/삭제 : 기존 데이터에 영향을 안미침(단, PK, UNIQUE는 제외-index때문)
            > alter table  테이블명  add constraint  조건이름   조건들기술…
            > alter table  테이블명  drop constraint  조건이름
          5) 사용자 정의 에러메시지
            - 만들기 단계 : 메시지 생성-> constraint 걸기
              > sp_addmessage  30001(번호),  "메시지 내용"
              > sp_bindmsg  constraint명,  30001(번호)
            - 지우기 단계 : 메시지 걸지정지 -> 메시지 지우기
              > sp_unbinding  constraint명
              > sp_dropmessage   30001(번호)

       6. Default
      
          1) 생성하여 바인드하기
            - create default 디폴트이름  as  "값"
              > sp_bindefault  디폴트이름, "테이블명.칼럼명"/"사용자정의타입"
                : 이미 지정된 필드인 경우 에러남.
          2) 언바인드하고 지우기
            - sp_unbindefault  "테이블명.칼럼명" /"사용자정의타입"
            - drop  default  디폴트이름

       7. rule
      
          1) 생성하여 걸어주기
            - create  rule  롤명  as 변수(@state) 조건(check, betweenm like….)
            - sp_bindrule  롤명,  "테이블명.칼럼명" /"사용자정의타입"
          2) 풀고 삭제하기
            - sp_unbindrule  "테이블명.칼럼명" /"사용자정의타입"
            - drop  rule  롤명
            ------------------------------------------------------------------------------
               Object         생성           삭제            확인       바인트/언바인드
            ------------------------------------------------------------------------------
            사용자정의타입 sp_addtype     sp_droptype    sp_help             /
            테이블         create table   drop table     sp_help             /
                           select into    
            뷰             create view    drop view      sp_help             /
            인덱스         create index   drop index     sp_help
                                                         sp_helpindex    
            디폴트         create default drop default   sp_helptext    Sp_bindefault
                                                                        Sp_unbindefault
            룰             create rule    drop rule      sp_helptext    Sp_bindrule
                                                                        Sp_unbindrule
            메시지         sp_addmessage  sp_dropmessage Sysusermessage Sp_bindmsg
                                                                        Sp_unbindmsg
            ------------------------------------------------------------------------------

       8. 함수들
      
          1) 문자열함수
            ------------------------------------------------------------------------------
             함 수 이 름                        예   제              설   명
            ------------------------------------------------------------------------------
            upper(칼럼명)                 Upper("aa'")=AA        대문자로 바꾸기
            Lower(칼럼명)                 Lower("AA")=aa         소문자로 바꾸기
            Convert(변경될타입,칼럼명)    Convert(char(4),price) 타입을 변경
            Substring(문자,시작,길이)     Substring("abc",2,1)=b 문자열 잘라내기
            Right(문자,길이)              Right("abc",2)=ab      왼쪽에서 잘라내기
            Charindex(찾는문자,문자)      Charindex("b","abc")=2 특정문자위치 찾기
            ascii(글자)                   ascii("T")=84          아스키값구하기
            Char(숫자)                    Char(84)=T             아스키값으로 문자구하기
            Ltrim(문자)                   Ltrim("   abc")=abc    왼쪽의 공백제거하기
            Str(숫자,길이,소수점이하자리) Str(45.26, 1)="45.3"   실수를 문자열로변환하기
            Soundex(문자)                 Soundex("green")
            ------------------------------------------------------------------------------

          2) 날짜 함수
            --------------------------------------------------------------------------------------
             함 수 이 름                            예   제                    설   명
            --------------------------------------------------------------------------------------
            Convert(변경될타입,날짜,타입)  Convert(char(10),date,111)   날짜를 다른 타입으로 변경
            Getdate()                                                   오늘날짜구하기
            Datename(날짜타입,날짜)        Datename(mm,getdate())       해당 날짜의 이름값
            Datepart(날짜타입,날짜)        Datepart(mm,getdate())       해당 날짜의 숫자값
            Dateadd(날짜타입,간격,날짜)    Dateadd(dd,3,getdate())      날짜에 간격만큼 더하기
            Datediff(날짜타입,날짜1,날짜2) Datediff(dd,date,getdate())  날짜1,2의 간격
            --------------------------------------------------------------------------------------
            Cf) convert의 타입
            ------------------------------------------------------------------------------
            타 입    결 과    타 입       결 과       타 입            결 과
            ------------------------------------------------------------------------------
             1     mm/dd/yy     5       dd-mm-yy        9       mon dd yyyy hh:mm:ss
             2     yy.mm.dd     6       dd mon yy       10      mm-dd-yy
             3     dd/mm/yy     7       mon dd yy       11      yy/mm/dd
             4     dd.mm.yy     8       hh:mm:ss        111     yyyy/mm/dd
            ------------------------------------------------------------------------------
            Cf) 날짜 타입
            ------------------------------------------------------------------------------
            타입      설 명   타 입     설 명    타 입     설 명    타 입    설 명
            ------------------------------------------------------------------------------
             yy    년도        wk    주           dw    년도내주     ss     초
             qq    분기        dd    일           hh    시간         ms     1/1000초
             mm    달          dy    년도내날짜   mi    분
            ------------------------------------------------------------------------------

          3) 숫자 함수
            ------------------------------------------------------------------------------
            함 수 이 름                      예   제              설   명
            ------------------------------------------------------------------------------
            Abs(숫자)                 Abs(-99)=99           절대값
            Ceiling(숫자)             Ceiling(123.5)=124    정수로 반올림
            floor(숫자)               Floor(123.5)=123      정수로 자름
            round(숫자,소수점자리수)  Round(2.460,2)=2.460  소수점 자리수 표시
            exp(실수)                 Exp(0)=1
            rand(정수)                Rand(39)=.49234563..  랜덤함수
            log(실수)                 Log(1)=0              로그
            pi()                      Pi()=3.141592…        파이
            Power(숫자,몇승인지)      Power(10,3)=1000      제곱승구하기
            Sqrt(숫자)                Sqrt(100)=10          제곱근구하기
            Sin,cos,tan               Cos(0)=1              사인,코사인,탄젠트구하기
            ------------------------------------------------------------------------------

          4) 기타 함수
            ------------------------------------------------------------------------------
            함 수 이 름                 예   제                  설   명
            ------------------------------------------------------------------------------
            Count(칼럼/*)           Count(*)             레코드의 개수
            Max Max(price)          최대값
            Min Min(price)          최소값
            Sum Sum(price)          합계
            Avg Avg(price)          평균
            Isnull(칼럼명,변환할값) Isnull(price,$0.00)  널일경우 값지정하기
            Suser_name()                                 지금 현재 접속한 유저명
            ------------------------------------------------------------------------------

       9. 배치처리
      
          1) 변수선언 : 변수명앞에 @표시
             cf) 연산상의 주의점
            --------------------------------------------------------------------------------------
             Declare @number int, @copy int, @sum int | Declare @number int, @copy int, @sum int
             Select @number=10                        | Select @number=10, @copy=@number,      
             Select @copy=@number,                    |        @sum=@number+100                
             @sum=@number+100                         |                                        
                                                      | num      copy        sum               
             num      copy        sum                 | -------  ------   -----------          
             -------  ------   -----------            | 10         10         NULL             
             10         10         110                |
            --------------------------------------------------------------------------------------
          2) global 변수
            - @@rowcount : 현재 질의의 영향을 받은 레코드 수
            - @@error : 가장 최근에 일어난 에러번호
            - @@identity : 가장 최근에 일어나 identity의 최대치
            - @@version : 현재 DB의 버전
          3) 문법
            --------------------------------------------------------------------------------------
            If... else       | If exists(select * from auth where id='kimds')
                             |    Select "데이터가 없어요"                  
                             | Else                                         
                             |    begin                                     
                             |       If @@rowcount = 1                      
                             |          Select "데이터가 하나 있어요"       
                             |       Else                                   
                             |          Select "데이터가 여러 개네요.."     
                             |    end                                       
            --------------------------------------------------------------------------------------
            While...         | While @price<30                                          
                             |    Begin                                                 
                             |       Select @price = @price + $1.00                     
                             |       If ( select count(*) from titles where price>@price)
                             |          Countinue                                       
                             |       Else                                               
                             |          Break                                           
                             |    end                                                   
            --------------------------------------------------------------------------------------
            Print            | Print "table %1 is not owned by user %2",@t_name,@t_user
            --------------------------------------------------------------------------------------           
            raiserror        | 변수에 에러지정
                             | (1) raiserror 70500 "Table %1 not found", @t_name
                             | (2) sp_addmessage 70500, "Table %1 not found"에러 출력
                             | (1) raiserror 70500, @t_name
            --------------------------------------------------------------------------------------

       10. 트랜잭션 처리
      
          1) 기본구성
            --------------------------------------------------------------------------------------
            bagin tran           | 트랜젝션 시작 => 처리1 진행 -> 처리2 진행 =>
            처리 1               | 처리3 진행 => 처리3 롤백 => 처리4 진행     
            save tran 지점1      | (따라서) 처리 1,2,4만 진행되었슴.          
            처리2                | Cf) select @@trancount                     
            save tran 지점2      | => begin tran이 몇번째 걸려있는지 단계조회 
            처리3                |
            rollback tran 지점2  |
            처리4                |
            commit tran          |
            --------------------------------------------------------------------------------------
          2) 처리구분
            - unchained mode : 사이베이스 기본모드로 하나의 명령이 바로 commit되는 방식
             (설정) set chained off : 묶어서 처리하려면 begin tran을 꼭 적어주어야 함.
            - chained mode : 여러가지의 처리의 한 단위로 묶어 commit이나 rollback하는 방식
             (설정) set chained on : begin tran을 안써도 됨.
      
       11. Locking
      
          1) 구분
            - Shared Locks : select하는 동안 걸리는 락으로 읽기만 가능하고 수정은 불가
            - Exclusive Locks : 수정하는 동안 걸리는 락으로 읽기/쓰기 다 불가
            - Update Locks : 수정을 위해 읽는 동안 걸리는 락으로 읽기만 가능.
              단, 수정할 데이터가 없는 경우 바로 락이 풀림.
          2) deadlock : 시스템이 그냥 임의적으로 하나의 락을 일방적으로 풀어버림. 따라서
          트렌젝션의 손실이 일어날 가능성이 있음
            (확인) select @transtate   => "3"은 abort가 된 경우, "0"는 진행중인 경우.
          3) Lock를 거는 방식
            - allpages locking(APL) : 관련 인덱스테이블의 페이지까지 다 lock을 걸기.
              해당 방식이 default이므로 안쓰려면 생성시 지정.
              Create table (...) lock [allpages/datapages/datarows]
            - Datapages locking(DPL) : 인덱스테이블은 안걸고 데이터테이블의 페이지만 걸기.
            - Datarows locking(DRL) : 인덱스테이블 안걸고 데이터의 해당 레코드만 락걸기.
            - DB의 Default Lock변경 : DBA만 권한 있음.
              sp_configure "lock scheme", 0, [allpages/datapages/datarows]
          4) Isolation Level : 데이터의 일관성 유지 레벨
            - dirty read : 처리1 변경단계의 가짜 데이터를 처리2에서 읽는 경우
            - nonrepeatable read : 처리1이 진행중에 처리2가 수행되어 처리1의 값이 중간에 변경
            - phanton read : 처리1이 진행중에 처리2에 의해 처리1에서 다른 데이터를 읽는 경우
            --------------------------------------------------------------------------------------
                            dirty read      nonrepeatable read       phanton read
            --------------------------------------------------------------------------------------
              Level 0          허용               허용                   허용
              Level 1          불가               허용                   허용
              Level 2          불가               불가                   허용
              Level 3          불가               불가                   불가
            --------------------------------------------------------------------------------------
            - 세팅 : set transaction isolation level [0/1/2/3]
            - 확인 : select @@isolation
          5) select title from titles holdlock where pub_id="0877" : udpate할때까지 lock걸기.
            - 오라클의 for update와 유사

       12. Cursors
      
          1) 사용방법
            - 선언(declare)
            - 열기(open)
            - 가져오기(fetch)
            - 닫기(close)
            - 재선언(deallocate)
          2) 예제
            --------------------------------------------------------------------------------------
              Declare biz_book cursor for select title,title_id from titles where type="business"
                  For read only
              Go                                      (=>꼭 단독배치를)
              Declare @title char(80), @title_id char(6)
              Open biz_book
              Fetch biz_book into @title, @title_id   (=> fetch는 항상 forward만 가능)
              While @@sqlstatus = 0                   (0=>하나성공, 1=>에러, 2=>하나이상남음)
                  Begin
                  ....
                  End
              Close biz_book
              Deallocate cursor biz_book
            --------------------------------------------------------------------------------------
          3) 하나이상을 fetch해 올 경우 : set cursor rows 레코드갯수 for biz_book
          4) set close on endtran on/off : commot/rollback후 커서가 close되면 on, 아니면 off

       13. stored procedure
      
          1) 수행단계
            - (1) create하면 내용은 syscounts에, query trees는 sysprocedures에 넣어둠
            - (2) 수행요청을하면 cach확인후 있으면 해당 query tree대로, 없으면 새로 넣고 처리.
          2) 문법 : 프로시져안에서는 뷰,디폴트,룰,다른 프로시져, 트리거 생성 안됨.
            create proc 이름 as 내용들 return
            --------------------------------------------------------------------------------------
              create proc proc_new_price ( @title_id char(6)="000000", @new_price money output )
              as
                  declare @state int
   
                  exec @state=proc_datacheck   (=> 다른 프로시져 이용하여 결과받기)
                  select @new_price=price from titles where title_id=@title_id
                  select @new_price=@new_price*$1.15
              return
            --------------------------------------------------------------------------------------
          3) 에러 : 0=> 성공, 0>error>-99 (시스템에러), 나머지: 사용자정의에러
          4) 주의사항 : 프로시져A안에서 다른 프로시져B를 부르는 경우 B안에서 문제가 있어 롤백이 있는 경우
             A작업도 같이 롤백됨. 따라서 다른 프로시져부르는 경우 save tran해주기.
          5) Select @@nestlevel : 프로시져 몇 단계까지 들어갔는지 표시
          6) With recompile : 프로시져는 procedure cach를 사용하기 때문에 관련 테이블이 구조가 변경되면
             다시 컴파일을 해주어야 하는데 이것을 해주는 역할
            (예)
            --------------------------------------------------------------------------------------
                             생   성                   |          수   정
            --------------------------------------------------------------------------------------
            Create table test ( a int, b int )         | [ 해결방안 ]                                  
            create proc pr_test ( @num int )           |                                               
                as                                     | (1)생성시 항상 재컴파일하도록                 
                select * from test where a=@num        | create proc test(...) with recompile...return
                return                                 |                                               
            pr_test(1)                                 | (2)수행시 재컴파일하도록(더 낫겟죠)           
            =>full scan방식으로 조회                   | exec pr_test(1) with recompile                
            ========================================== |                                               
            Create index test_idx on test(a)Pr_test(1) | (3)해당 테이블을 기준으로 다바꿔              
            =>index search방식으로 조회가 더 좋은디    | sp_recompile test                             
            --------------------------------------------------------------------------------------

       14. Triggers
      
          1) 생성
            create trigger 트리거명 on 관련테이블 for 관련DML as 작업내용
            (예)
            --------------------------------------------------------------------------------------
            create trigger trg_I_sales
            on salesfor
            insert
            as
               declare @num int
              
               select count(*) from inserted
               select @@rowcount=@num
               if @num = 0
               begin
                  raiserror 40070, "no data inserted."
                  Rollback tran
               end
            --------------------------------------------------------------------------------------
          2) 처리방식 : 트리거는 특정 테이블에 insert나 delete나 update가 일어날 때 동시에 처리해주거나
                        검사해주어야 하는 것을 걸어주는 것으로 처리 적용대상이 되는 레코드들은 inserted,
                        deleted라는 임시테이블에 저장되어진다.(update는 사실 inserted에도 deleted에도
                        존재하는 것임) . 트리거는 중간에 문제가 생겨서 이전 프로시져의 트렉젝션까지
                        롤백하지는 못함.
          3) Update 트리거의 경우 if update(테이블PK) 해주어 키가 업데이트가 되었는지 확인가능.
          4) Recursive 트리거의 경우 : 무한으로 걸린 경우 16번까지 하다 rollback

       15. 시스템 조회명령들
      
          1) sp_help [오브젝트]
            - 오브젝트명을 입력하지 않으면 해당 DB의 모든 오브젝트에 대한 정보를,
              오브젝트명을 기입한 경우에는 해당 오브젝트의 자세한 정보를 보여줌.
          2) sp_syntax 원하는문법
            - 해당 문법의 사용 방법을 기술해 줌
          3) sp_who [원하는 계정]
            - 계정을 안쓰면 전체 계정에 대한 정보를 기술,
              계정을 기술하면 해당 계정에 대한 정보를 보여줌.
          4) Sp_helpdb [디비명]
            - 디비명을 기입한지 않으면 모든 디비정보를, 기입하면 해당 디비의 정보를 보여줌.
          5) Sp_rename 오브젝트명, 새로 바꿀 오브젝트명
            - 오브젝트명은 변경. 테이블명/칼럼명/타입명/뷰명/인덱스명/constraint
          6) sp_helpconstraint 테이블명
            - 해당 테이블에 걸려있는 constraint정보를 보여줌
          7) sp_depends  테이블명/뷰명/프로시져명
            - 테이블명을 적으면 해당 테이블이 reference걸려있는 모든 오브젝트들을,
              뷰명 적으면 해당 뷰가 참조하는 테이블명을 보여줌. 프로시져는 관련테이블들 리스트업.
          8) sp_helptext 뷰명/디폴트명/롤명/프로시져명
            - 작성된 뷰의 질의문을 보여줌
          9) sp_helpconstraint 테이블명
            - 테이블의 constraint 정보를 보여줌.
          10) Sp_lock
            - 현재 디비에 걸려있는 락정보를 보여줌
          11) sp_cursorinfo 커서명
            - 커서에 대한 정보를 보여줌
반응형

* START UP


Oracle

Sybase

%su - oracle
password:
%svrmgrl
SVRMGR>connect internal
SVRMGR>startup
SVRMGR>exit
%lsnrctl start

%su - sybase
password:
%cd install
%startserver -f RUN_SYBASE
%startserver -f RUN_SYS_BAKUP
※RUN_SYBASE, RUN_SYB_BACKUP는 Server name이므로 확인



* SHUTDOWN


Oracle

Sybase

%su - oracle
password:
%svrmgrl
SVRMGR>connect internal
SVRMGR>shutdown
SVRMGR>exit
%lsnrctl stop

%su - sybase
password:
%cd install
%isql -Usa -P
1>shutdown SYB_BACKUP
2>go
1>shutdown


* CREATE DATABASE


Oracle

Sybase

%sqlplus system/manager
SQL>create tablespace mpts/datafile '/data1/mpdb/mp.dbf' size 100
default storage(
initial 64K
next 64K
pctincrease 0
minextents 2
);
Tablespace create.

SQL>create tablespace mptmpts/datafiile '/data1/mpdb/mp.dbf' size 20M
deault storage(
initial 64K
next 64K
pctincrease 0
minextents 2
);
Tablespace create.

SQL>create user medpack
2 indetified by medpack000
3 default tablesapce mpts
4 temporary tablespace mptmpts
5 quota unlimited on mpts
6 quota unlimited on mptmpts;
User create.

SQL>grant connect, resource to medpack;
Grant Succeede.

※ 위 예제는 mpts, mptmpts라는 tablespace를 만들고 medpack이라는 User를 생성한다.
  mpts와 mptmpts의 비율은 8:2비율이 적당하고 User생성시 default tablespace와 temporary tablespace를 지정해 준다.
그런후에 connect와 resource라는 rule을 User에게 허용해 준다.

전체적인 순서는
1)2개의 Tablespace생성
2)User생성
3)User에게 rule허용
과 같다.












 

%isql -Usa -P
1>disk init
2>name = 'mp_dev',
3>physname = "/data1/mpdv/mp.dev",
4>vdevno = 2,
5>size = 51200(page단위)
6>go

1>disk init
2>name = "mplog_dev",
3>physname = "/data1/mpdb/mp.log.dev",
4>vdevno = 3,
5>size = 10240
6>go

※100MB를 할당하려면 100 * 512 = 51200의 값을 사용한다.

1>create database mepackdb
2>on mp_dev = 100(Mega단위)
3>log on mplog_dev = 20
4>go

CREATE DATABASE: allocating 51200 pages...
CREATE DATABASE: allocating 10240 pages...

1>sp_addlogin medpack, medpack000 medpackdb
2>go

Password correctly set.
Account unlocked.
New login created.
(return status = 0)

1>use medpackdb
2>go

1>sp_changedbowner medpack
2>go

Database owner changed.
(return status = 0)

※ 위의 예제는 mp_dev, mplog_dev라는 2개의 device를 만들고 medpackdb를 만든다. 그런후에 medpack이라는 User를 만들어 medpackdb를 기본db로 설정한다. 그리고 나서 medpack의 소유권을 medpack으로 바꾸어 준다.

전체적인 순서는
1)2개의 device 생성
2)db생성
3)User생성
4)db의 소유권 변경
과 같다.


* DROP DATABASE

Oracle

Sybase

%sqlplus system/manager
SQL>drop user medpack cascade;

User dropped

SQL>drop tabelspace mpts
2 including contents
3 cascade contraints;

Tablespace dropped

SQL>exit


※그런후에 실제 data file를 삭제한다.

※위 예제는 medpack이라는 User와 그 User에게 할당된 tablespace를 삭제한다.
 전체적인 순서는
 1)먼저 User를 삭제(Drop)
 2)2개의 tablespace를 삭제(Drop)
 3)File System에 있는 File들을 삭제
와 같다.
 
※Oracle에서는 사실상 database는 하나만 존재한다. 각각의 User들은 tablespace를 할당받아 실제의 data를 저장한다.
따라서, User Space의 증가는 tablespace를 늘려주면 가능하다.
(Ref, alter tablesapce....)

%isql -Usa -P
1>drop database medpackdb
2>go

1>sp_dropdevice mp_dev
2>go

Device dropped.
(return status = 0)

※위 예제는 medpackdb이라는 이름의 database를 삭제하고 database가 사용하고 있던 device를 삭제한다. 그리고 나서 User를 삭제한다.
 전체적인 순서는
 1)database 삭제
 2)2개의 device삭제
 3)User삭제
 4)File System에 있는 File들을 삭제
와 같다

※Sybase에서는 device에서 일정한 양의 space를 할당받아 database를 만든다.
device를 만들 때 번호를 적당하게 지정해 주어야 하는데, sp_helpdevice라는 system procedure를 이용한다.




 



 

출처: http://www.musi.co.kr/zero/view.php?id=database&page=2&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=2

반응형

관련글_1


Public Cn As ADODB.Connection
Public Rs As ADODB.Recordset
Public Cstmst As String
Public strConnectionString As String


Private Sub Command1_Click()
Set Cn = New ADODB.Connection
Cn.Open "ODBC; Driver=Sybase SQL Anywhere 6.0;" & _
                   "Uid=DBA;" & _
                   "Pwd=SQL;" & _
                   "Dsn=YkAgDb;"


Set Rs = New ADODB.Recordset

Dim SQL
Dim Mng_cd
SQL = "SELECT mng_cd, cst_nm, zip_no, cst_addr, boss_nm, tel_no, emp_dlv, cst_gb1, cst_gb2, cst_ymd, cst_abc, cst_st FROM dbo.CSTMST WHERE bit_cd4 = 'Y' ORDER BY mng_cd, cst_nm, zip_no, cst_addr, boss_nm, tel_no, emp_dlv, cst_gb1, cst_gb2, cst_ymd, cst_st, cst_abc"

Rs.Open SQL, Cn       ' Sql 문으로 레코드 오픈

Open "c:\work\Ykcon.csv" For Output As #1

Do Until Rs.EOF
    Mng_cd = Format(Val(Rs!Mng_cd & ""), "000000") 'Rs!Mng_cd
    'Retail = Rs!Retail
    cst_nm = Rs!cst_nm
    zip_no = Rs!zip_no
    cst_addr = Rs!cst_addr
    boss_nm = Rs!cst_addr
    tel_no = Rs!tel_no
    emp_dlv = Rs!emp_dlv
    cst_gb1 = Rs!cst_gb1
    cst_gb2 = Rs!cst_gb2
    cst_ymd = Rs!cst_ymd
    cst_abc = Rs!cst_abc
    cst_st = Rs!cst_st
   
 폼어느 위치에다가   선언을 해줘야 하나여?? 처음 폼형식에서 선언해줘야 하는건가여?


관련글_2

1. sybase odbc 드라이브를 구하세요...
( 못구하시면  mail 보내시면 보내드릴께요 용량이 14M가 넘어서 파일첨부에 되지 않습니다)

2. setup으로 설치하십시오
3.  dsedit를 실행하십시오
4.  확인
5. 화면의 왼쪽부분(server 부분 아래 빈공간)에서 오른쪽 마우스를 누르시고 add를 선택하십시오
6. 서버이름을 지정하시고요
7. 오른쪽 Server address 부분에 sybase서버 ip와 포트를 입력하세요
   (ex :    211.2.100.3,3035)  반드시 ip와 포트 사이에 콤마를 쓰셔야함....
8. 번개 모양의 아이콘 (ping server임) 으로 test하여 성공하여야 합니다
9. dsedit종료하시고요
10. 제어판의 odbc관리자에 시스템 dns에 설정하세요...... (꼭 필요한 것만 하면되요...)

애고 잘모르는데 설명 해들릴려니깐 힘드네요.....

위에 처럼 하시면 됩니다..  
안되시면 메일 주세요....



관련글_3

일단 Provider가 나오는 경우는 ODBC연결이 아닌 OLEDB로 연결하려는 것 같은데
Sybase는 Oracle이나 MS-SQL가 달리 VB에서 기본으로 제공하지는 않습니다..
그리고  Sybase 11버전 까지는 OLEDB가 지원되지 않고 Syabse12부터  지원이 됩니다,,,,
일단 Sybase Open Client버전이 11이하이면 www.sybase.co.kr에서 Open Client 12.5버전을
개발환경에 새로 인스톨하시고 그러면 그 안에 OLEDB라는 폴더가 생깁니다...
OLEDB폴더 안에 sydaadm.exe를 실행시켜 Server를 지정합니다..
(지정하는 방법은 ODBC와 비슷)그리고 그리고 Proveider명은
Provider =Sybase.ASEOLEDBProvider.2입니다..
예) DB Server IP=111.111.111.111,   Port=5000
      Data Sourcer Name = TEST(sydaadm.exe에서 생성)
      User Id = Test,  Password = 123456
      DB명 = TestDB라고 하면

    VB에서 Connection String은

    sCnSvr1 = "Provider=Sybase.ASEOLEDBProvider.2;Initial Catalog=TestDB;Password=123456;"
    sCnSvr1 = sCnSvr1 + "User Id=Test;Data Source=Test;Server Name=111.111.111.111;"
    sCnSvr1 = sCnSvr1 + "Server Port Address=5000"

이라고 사용
위에서 ServerName은 반드시 IP주소로 표시

더 자세한 문의는 메일로 연락바람.....(저도 처음에 Sybase OLEDB연결 때문에 고생 많이함..ㅠ.ㅠ)

관련글_4

ADO연결 방식으로 Sybase에 연결하여 사용 중입니다.

  Set DB = New ADODB.Connection
  With DB
    .ConnectionString = "UID=**;PWD=******;DSN=******"
    .ConnectionTimeout = 30
    .CommandTimeout = 120
    .Open
  End With

  Set Rs = New ADODB.Recordset
  S_SQL = "select a.ab, ... from aaa a, bbb b where ... ... order by a.cont_no, b.cnt"
  Rs.Open S_SQL, DB, adOpenStatic, adLockReadOnly

  위와 같이 쓰는데요...
  건수가 작은 한 5천 미만 건수는 잘 처리 되는데요...
  약 5천 건수를 초과하면

  -2147217887 (오류코드)
  ODBC 드라이버가 요청한 속성을 지원하지 않습니다.
 
  이렇케 되는 군요...

관련글_5

네트웍에 DB를 접속 할려면 Direct가아닌 연결해주는 ODBC를 사용하죠(물론 다른것도 있습니다.)
그래서 직접 jet를 이용해 local의 db를 연결하는것과 좀 다르죠
물론 local도 odbc로 연결이 가능합니다.
그런데 그건 속도의 저하를 가져와 그렇게 사용하는 사람은(거의) 없죠

provider는 mdb를 읽을 드라이버 명이구요
(3.51은 아마도 Access 2000은 인식 못할꺼구요 3.6은 인식합니다. 이러한 차이죠..)
datasource는 당연히 화일명이죠 mdb의 위치...(넘 당연한가..)


    adoConnectionString = "dsn=sybaseodbc;" & _
                          "server=" & adoServerName & ";" & _
                          "uid=" & adoLoginID & ";" & _
                          "pwd=" & adoLoginPassword & ";" & _
                          "database=" & adodefaultDatabaseName

dsn(Dats Source Name) => ODBC에 잡힌 이름이죠, Sybase 접속 할려면 꼭 설정해 줘야 겠죠
server                => 당연히 접속할 서버 이름이겠죠..
uid                   => 접속할 사용자 명이구요
pwd                   => 이건 패스워드 겠죠
database              => DB의 여러 데이터 베이스중 기본으로 접속할 이름을 써주는 곳이죠..

답이 되었는지 모르겠내요..
제가 설명이 좀 그래서..
부족하시면 다시 질문 주세요..

반응형

ㅇ Tunning Guide
   - DBO만 소유자


   - 커서와 View 지양
   - View내 '*' 존재시 원 Table 변경시 View Recompile 실시


   - SP 지향
   - SP 작성시 소유자 명시 : CREATE PROC DBO.SP명
   - SP 작성시 DB명 명시 : USE DB명
   - SP 작명시 SP외의 접두어 사용
   - SP는 'SET NOCOUNT ON'으로 시작


   - [Sybase] CREATE Tbl보다 SELECT INTO 구문 지향


   - SELECT는 필요한 값만 명시
   - COUNT(ColNm)보다 COUNT(*) 사용


   - DELETE시 FROM 붙이기(MySQL) : DELETE FROM table_name WHERE ...

  

   - UPDATE시 Index Column은 지양

   - JOIN에 의한 UPDATE 지양

  

   - WHERE절은 INDEX 또는 INDEX Hint 사용

   - 부정문은 긍정문으로 수정

   -  <, >, = 사용시 가능한 '=' 포함

   - Column 변환 금지

   - EXISTS()로 대체가능한 COUNT(*)는 EXISTS() 사용

   - LIKE 지양 : 코드 찾기로 유도

   - MIN과 MAX 함께 사용 지양

   - SUBSTRING  지양 : Table 설계시 분해로 해소


   - TRANSACTION에서 사용하는 Table은 타 Program과 비교하여 일관된 순서 적용

   - TRANSACTION은 가급적 짧게 관리


ㅇ Archive 정리(query tool 사용)
USE PUBS                                                 -- PUBS DB 사용
BACKUP LOG PUBS WITH TRUNCATE_ONLY  -- PUBS DB 로그 백업후 삭제
GO
SP_HELPDB PUBS                                      -- PUBS DB 정보 확인(Size 조정전)
DBCC SHRINKFILE(PUBS_LOG,#)                 -- 줄일 File Size #(단위: MB) 입력
SP_HELPDB PUBS                                      -- PUBS DB 정보 확인(Size 조정후)
※ 관련파일 : MSSQL > Data > xxx_LOG.xxx


ㅇ Sybase Attribute Value

max memory : Max Memory, 1M = 512page

number of locks : 동시 Locking 개수

precedure cache size : SP Cache Size, 1M = 512page

shared memory starting address : DB Start시 할당 된 메모리 할당여부 결정, 1 = 할당영역 확보

statement cache size : Statement cache 사용할 영역

max online engines : OS CPU 개수에 의존적인 DB사용 최대 엔진수

number of engines at startup : DB Start시 Start할 엔진 수


ㅇ 기타

※ Oracle : Ora, Sybase : Syb

ABS()                                                                  : 절대값

AS                                                                       : [MS, Syb]Alias

AS                                                                       : [Ora]Column Alias 만 가능

AVG()                                                                  : 평균값

ALTER TABLE TblNm ADD ColNm ColType(#)            : TblNm에 ColNm Add
BACKUP DATABASE DB명 TO DISK = '디스크:\경로\백업파일명'  : DB Backup

BEGIN TRAN                                                         : Transaction 시작

BEGIN TRANSACTION...COMMIT TRANSACTION       : Transaction 처리

CASE .. WHEN .. THEN .. ELSE .. END                     : [Syb,MS] 조건 분기

SQL Query 참고사항


ㅇ Tunning Guide
   - DBO만 소유자


   - 커서와 View 지양
   - View내 '*' 존재시 원 Table 변경시 View Recompile 실시


   - SP 지향
   - SP 작성시 소유자 명시 : CREATE PROC DBO.SP명
   - SP 작성시 DB명 명시 : USE DB명
   - SP 작명시 SP외의 접두어 사용
   - SP는 'SET NOCOUNT ON'으로 시작


   - [Sybase] CREATE Tbl보다 SELECT INTO 구문 지향


   - SELECT는 필요한 값만 명시
   - COUNT(ColNm)보다 COUNT(*) 사용


   - DELETE시 FROM 붙이기(MySQL) : DELETE FROM table_name WHERE ...

  

   - UPDATE시 Index Column은 지양

   - JOIN에 의한 UPDATE 지양

  

   - WHERE절은 INDEX 또는 INDEX Hint 사용

   - 부정문은 긍정문으로 수정

   -  <, >, = 사용시 가능한 '=' 포함

   - Column 변환 금지

   - EXISTS()로 대체가능한 COUNT(*)는 EXISTS() 사용

   - LIKE 지양 : 코드 찾기로 유도

   - MIN과 MAX 함께 사용 지양

   - SUBSTRING  지양 : Table 설계시 분해로 해소


   - TRANSACTION에서 사용하는 Table은 타 Program과 비교하여 일관된 순서 적용

   - TRANSACTION은 가급적 짧게 관리


ㅇ Archive 정리(query tool 사용)
USE PUBS                                                 -- PUBS DB 사용
BACKUP LOG PUBS WITH TRUNCATE_ONLY  -- PUBS DB 로그 백업후 삭제
GO
SP_HELPDB PUBS                                      -- PUBS DB 정보 확인(Size 조정전)
DBCC SHRINKFILE(PUBS_LOG,#)                 -- 줄일 File Size #(단위: MB) 입력
SP_HELPDB PUBS                                      -- PUBS DB 정보 확인(Size 조정후)
※ 관련파일 : MSSQL > Data > xxx_LOG.xxx


ㅇ Sybase Attribute Value

max memory : Max Memory, 1M = 512page

number of locks : 동시 Locking 개수

precedure cache size : SP Cache Size, 1M = 512page

shared memory starting address : DB Start시 할당 된 메모리 할당여부 결정, 1 = 할당영역 확보

statement cache size : Statement cache 사용할 영역

max online engines : OS CPU 개수에 의존적인 DB사용 최대 엔진수

number of engines at startup : DB Start시 Start할 엔진 수


ㅇ 기타

※ Oracle : Ora, Sybase : Syb

ABS()                                                                  : 절대값

AS                                                                       : [MS, Syb]Alias

AS                                                                       : [Ora]Column Alias 만 가능

AVG()                                                                  : 평균값

ALTER TABLE TblNm ADD ColNm ColType(#)            : TblNm에 ColNm Add
BACKUP DATABASE DB명 TO DISK = '디스크:\경로\백업파일명'  : DB Backup

BEGIN TRAN                                                         : Transaction 시작

BEGIN TRANSACTION...COMMIT TRANSACTION       : Transaction 처리

CASE .. WHEN .. THEN .. ELSE .. END                     : [Syb,MS] 조건 분기

CEIL()                                                                  : [Ora] 올림

CEILING()                                                             : [Syb] 올림

FLOOR()                                                               : [Syb] 버림

CHR()                                                                  : [Ora] Data를 Character로 변환

CHAR()                                                                : [Syb] Data를 Character로 변환

COMMIT                                                              : Transation 처리 및 저장

CONVERT(INT,VarNm);                                          : [Syb] VarNm을 Int화

CONVERT(VARCHAR(10),GETDATE(),101)               : [Syb] mm/dd/yyyy 로 변경

CONVERT(VARCHAR(10),GETDATE(),102)               : [Syb] yyyy.mm.dd 로 변경

CONVERT(VARCHAR(10),GETDATE(),103)               : [Syb] dd/mm/yyyy 로 변경

CONVERT(VARCHAR(10),GETDATE(),104)               : [Syb] dd.mm.yyyy 로 변경

CONVERT(VARCHAR(10),GETDATE(),105)               : [Syb] dd-mm-yyyy 로 변경

CONVERT(VARCHAR(10),GETDATE(),106)               : [Syb] dd mm yyyy 로 변경

CONVERT(VARCHAR(10),GETDATE(),107)               : [Syb] mm dd, yyyy 로 변경

CONVERT(VARCHAR(10),GETDATE(),108)               : [Syb] hh:mi:ss 로 변경

CONVERT(VARCHAR(10),GETDATE(),109)       : [Syb] mm dd yyyy h:mi:ss:??PM/AM로 변경

CONVERT(VARCHAR(10),GETDATE(),110)               : [Syb] mm-dd-yyyy 로 변경

CONVERT(VARCHAR(10),GETDATE(),111)               : [Syb] yyyy/mm/dd 로 변경

CONVERT(VARCHAR(10),GETDATE(),112)               : [Syb] yyyymmdd 로 변경

CONVERT(VARCHAR(10),GETDATE(),113)               : [Syb] yy mm yyyy hh:mm:ss:???로 변경

CONVERT(VARCHAR(10),GETDATE(),114)               : [Syb] hh:mm:ss:??? 로 변경

CREATE TABLE TblNm ( Col1 ColType(#) NOT NULL, ..) : TblNm Create

CREATE TABLE TblNm ( Col1 ColType(#) default 값, ..)  : [Syb] TblNm Create, Defualt 값 부여

DATALENGTH()                                                      : [Syb] 문자열 길이

DATEADD(DAY, ±일, GETDATE())                            : [Syb] 금일 ±일 더하기
DATEADD(MONTH, ±월, GETDATE())                       : [Syb] 금월 ±월 더하기
DATEADD(YEAR, ±년, GETDATE())                          : [Syb] 금년 ±년 더하기

DATEDIFF()                                                           : [Syb] Date간 차이

DECLARE @@VarNm char(10)                                 : [Syb] Grobal 변수 선언

DECLARE @VarNm char(10)                                   : [Syb] Local 변수 선언

DECODE()                                                             : [Ora] Case문 대체

DUMP DATABASE DB_Nm FROM "/PathNM/FileNm.dmp"  : [Syb] DB Backup

exec sp_rename 'TblNm.ColNm','NewColNm','column' : [Syb] ColNm수정

EXEC sp_helpdb DBMS_Nm                                     : [Syb] DBMS size, owner 정보
EXEC sp_primarykey TblNm, Col1, Col2                     : TblNm에 Col1, Col2를 PK로 지정

exec sp명 parameter값                                            : [Syb] Sp 구동

EXISTS (SELECT Col FROM Tbl Where Tbl.Col = Tbl2.Col : [Syb] 복수개의 SELECT 값 비교

FROM Tbl1 = Tbl2(+)                                             : [Ora] Left Outer Join

FROM Tbl1 *= Tbl2                                               : [Syb] Left Outer Join

GETDATE()                                                            : [Syb,MS] 현 시간

IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[sp_MNG_ATTD_REC_I]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)

                                                                            : Object 존재유무 확인
INSERT INTO TblNm VALUES('V1','V2')                     : V1, V2를 TblNm에 추가

INSERT INTO TblNM SELECT ...                               : [Syb] 조회결과 INSERT
ISNULL()                                                               : [Syb] Null을 타 문자로 치환

isql -U사용자ID -P패스워드 -i입력파일 -o출력파일      : [Syb]쿼리 결과 파일로 만들기

LEN()                                                                    : [Syb] 문자열 길이

LENGTH()                                                              : [Ora] 문자열 길이

LOAD DATABASE DB_Nm FROM "/PathNm/FileNm.dum"  : [Syb]에서 DB Restore

LOWER()                                                               : 소문자로 변환

LOWNUM                                                               : [Ora] 행의 갯수 제한시 사용

LTRIM()                                                                : [Syb] Left 공란 제거

MAX()                                                                   : 최대값

MIN()                                                                    : 최소값

NVL()                                                                   : [Ora]에서 Null을 타 문자로 치환

print "%1!", @변수명                                                : [Syb] SP의 변수 출력하기
RAND()                                                                 : [Syb]에서 난수 구하기

REPLACE()                                                           : [Ora]에서 문자치환

ROLLBACK                                                            : Transaction 처리 취소

RTRIM()                                                                : [Syb] Right 공란 제거

SELECT * FROM #TmpTblNm                                   : [Syb] 임시 테이블 사용
SELECT * FROM TblNm < FlNm.sql > FlNm2.out         : [Syb] FlNm.sql 결과 → FlNn2.out

SELECT db_name()                                                : [Syb]현재 Login DB명 Display

SELECT CONVERT(CHAR(10), GETDATE(), 126)        : Date Type  → Char(10) Type
SELECT CONVERT(CHAR(10), GETDATE(), 112)        : Date Type  → Char(10) Type

SELECT * INTO NewTblNm FROM OldTblNm               : [Syb] CREATE Tbl, INSERT Tbl

SELECT ROWNUM = IDENTITY(9)                              : [Syb] Oracle Rownum 따라하기

 , ColNm
INTO #T
FROM TblNm

SET IDENTITY_INSERT TblNm ON                              : Identity Column 수정 가능

SET ROWCOUNT #                                                  : [Syb] #건만큼 반환

sp_cacheconfig "default data cache"                        : [Syb] 할당된 Default Data Cache 조회

sp_configure "number of user connections",100          : [Syb] 동시 접속자 100명

sp_configure "lock scheme",0,"datarows                   : [Syb] Row Level Locking

sp_help                                                                 : [Syb] 현재 Login Table 조회

sp_help Tbl_Nm                                                      : [Syb] Tbl_Nm 정보 조회

sp_helpdb DB_Nm                                                   : [Syb] DB_Nm 정보조회

sp_lock                                                                 : [Syb]Locking정보 Display

sp_who                                                                 : [Syb] 접속된 Process

STR()                                                                    : [Syb] Numeric을 Char로 변환

STUFF()                                                                : [Syb] 문자치환

SUBSTR()                                                              : [Ora] Substring

SUBSTRING()                                                         : [Syb] Substring
SUM()                                                                   : 합계

SYSDATE                                                              : [Ora] 현 시간

TO_CHAR()                                                            : [Ora] Data을 Char로 변환

TO_DATE()                                                             : [Ora] Data을 Date로 변환

TO_NUMBER()                                                        : [Ora] Data을 Numeric로 변환

TOP 1                                                                    : [Syb] 첫 Row Return

TRUNCATE TABLE TblNm                                         : TblNm의 모든 데이터 삭제

UNION                                                                    : SELECT 결과 APPEND - 교집합

UNION ALL                                                             : SELECT 결과 APPEND
UPDATE TblNm SET Col1='xxx', Col2='yyy'                 : TblNm의 Col1, Col2 Update
UPDATE STATISTICS TblNM                                     : TblNm 통계 갱신

UPDATE Tbl1                                                          : [Syb] Join Update

Set Col1 = Col2

FROM Tbl1 INNER JOIN Tbl2

ON Tbl1.Key1 = Tbl2.Key2
UPPER()                                                                : 대문자로 변환

USE DB_Nm                                                           : DB_nm으로 이동

CHR()                                                                  : [Ora] Data를 Character로 변환

CHAR()                                                                : [Syb] Data를 Character로 변환

COMMIT                                                              : Transation 처리 및 저장

CONVERT(INT,VarNm);                                          : [Syb] VarNm을 Int화

CONVERT(VARCHAR(10),GETDATE(),101)               : [Syb] mm/dd/yyyy 로 변경

CONVERT(VARCHAR(10),GETDATE(),102)               : [Syb] yyyy.mm.dd 로 변경

CONVERT(VARCHAR(10),GETDATE(),103)               : [Syb] dd/mm/yyyy 로 변경

CONVERT(VARCHAR(10),GETDATE(),104)               : [Syb] dd.mm.yyyy 로 변경

CONVERT(VARCHAR(10),GETDATE(),105)               : [Syb] dd-mm-yyyy 로 변경

CONVERT(VARCHAR(10),GETDATE(),106)               : [Syb] dd mm yyyy 로 변경

CONVERT(VARCHAR(10),GETDATE(),107)               : [Syb] mm dd, yyyy 로 변경

CONVERT(VARCHAR(10),GETDATE(),108)               : [Syb] hh:mi:ss 로 변경

CONVERT(VARCHAR(10),GETDATE(),109)       : [Syb] mm dd yyyy h:mi:ss:??PM/AM로 변경

CONVERT(VARCHAR(10),GETDATE(),110)               : [Syb] mm-dd-yyyy 로 변경

CONVERT(VARCHAR(10),GETDATE(),111)               : [Syb] yyyy/mm/dd 로 변경

CONVERT(VARCHAR(10),GETDATE(),112)               : [Syb] yyyymmdd 로 변경

CONVERT(VARCHAR(10),GETDATE(),113)               : [Syb] yy mm yyyy hh:mm:ss:???로 변경

CONVERT(VARCHAR(10),GETDATE(),114)               : [Syb] hh:mm:ss:??? 로 변경

CREATE TABLE TblNm ( Col1 ColType(#) NOT NULL, ..) : TblNm Create

CREATE TABLE TblNm ( Col1 ColType(#) default 값, ..)  : [Syb] TblNm Create, Defualt 값 부여

DATALENGTH()                                                      : [Syb] 문자열 길이

DATEADD(DAY, ±일, GETDATE())                            : [Syb] 금일 ±일 더하기
DATEADD(MONTH, ±월, GETDATE())                       : [Syb] 금월 ±월 더하기
DATEADD(YEAR, ±년, GETDATE())                          : [Syb] 금년 ±년 더하기

DATEDIFF()                                                           : [Syb] Date간 차이

DECLARE @@VarNm char(10)                                 : [Syb] Grobal 변수 선언

DECLARE @VarNm char(10)                                   : [Syb] Local 변수 선언

DECODE()                                                             : [Ora] Case문 대체

DUMP DATABASE DB_Nm FROM "/PathNM/FileNm.dmp"  : [Syb] DB Backup

exec sp_rename 'TblNm.ColNm','NewColNm','column' : [Syb] ColNm수정

EXEC sp_helpdb DBMS_Nm                                     : [Syb] DBMS size, owner 정보
EXEC sp_primarykey TblNm, Col1, Col2                     : TblNm에 Col1, Col2를 PK로 지정

exec sp명 parameter값                                            : [Syb] Sp 구동

EXISTS (SELECT Col FROM Tbl Where Tbl.Col = Tbl2.Col : [Syb] 복수개의 SELECT 값 비교

FROM Tbl1 = Tbl2(+)                                             : [Ora] Left Outer Join

FROM Tbl1 *= Tbl2                                               : [Syb] Left Outer Join

GETDATE()                                                            : [Syb,MS] 현 시간

IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[sp_MNG_ATTD_REC_I]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)

                                                                            : Object 존재유무 확인
INSERT INTO TblNm VALUES('V1','V2')                     : V1, V2를 TblNm에 추가

INSERT INTO TblNM SELECT ...                               : [Syb] 조회결과 INSERT
ISNULL()                                                               : [Syb] Null을 타 문자로 치환

isql -U사용자ID -P패스워드 -i입력파일 -o출력파일      : [Syb]쿼리 결과 파일로 만들기

LEN()                                                                    : [Syb] 문자열 길이

LENGTH()                                                              : [Ora] 문자열 길이

LOAD DATABASE DB_Nm FROM "/PathNm/FileNm.dum"  : [Syb]에서 DB Restore

LOWER()                                                               : 소문자로 변환

LOWNUM                                                               : [Ora] 행의 갯수 제한시 사용

LTRIM()                                                                : [Syb] Left 공란 제거

MAX()                                                                   : 최대값

MIN()                                                                    : 최소값

NVL()                                                                   : [Ora]에서 Null을 타 문자로 치환

print "%1!", @변수명                                                : [Syb] SP의 변수 출력하기
RAND()                                                                 : [Syb]에서 난수 구하기

REPLACE()                                                           : [Ora]에서 문자치환

ROLLBACK                                                            : Transaction 처리 취소

RTRIM()                                                                : [Syb] Right 공란 제거

SELECT * FROM #TmpTblNm                                   : [Syb] 임시 테이블 사용
SELECT * FROM TblNm < FlNm.sql > FlNm2.out         : [Syb] FlNm.sql 결과 → FlNn2.out

SELECT db_name()                                                : [Syb]현재 Login DB명 Display

SELECT CONVERT(CHAR(10), GETDATE(), 126)        : Date Type  → Char(10) Type
SELECT CONVERT(CHAR(10), GETDATE(), 112)        : Date Type  → Char(10) Type

SELECT * INTO NewTblNm FROM OldTblNm               : [Syb] CREATE Tbl, INSERT Tbl

SELECT ROWNUM = IDENTITY(9)                              : [Syb] Oracle Rownum 따라하기

 , ColNm
INTO #T
FROM TblNm

SET IDENTITY_INSERT TblNm ON                              : Identity Column 수정 가능

SET ROWCOUNT #                                                  : [Syb] #건만큼 반환

sp_cacheconfig "default data cache"                        : [Syb] 할당된 Default Data Cache 조회

sp_configure "number of user connections",100          : [Syb] 동시 접속자 100명

sp_configure "lock scheme",0,"datarows                   : [Syb] Row Level Locking

sp_help                                                                 : [Syb] 현재 Login Table 조회

sp_help Tbl_Nm                                                      : [Syb] Tbl_Nm 정보 조회

sp_helpdb DB_Nm                                                   : [Syb] DB_Nm 정보조회

sp_lock                                                                 : [Syb]Locking정보 Display

sp_who                                                                 : [Syb] 접속된 Process

STR()                                                                    : [Syb] Numeric을 Char로 변환

STUFF()                                                                : [Syb] 문자치환

SUBSTR()                                                              : [Ora] Substring

SUBSTRING()                                                         : [Syb] Substring
SUM()                                                                   : 합계

SYSDATE                                                              : [Ora] 현 시간

TO_CHAR()                                                            : [Ora] Data을 Char로 변환

TO_DATE()                                                             : [Ora] Data을 Date로 변환

TO_NUMBER()                                                        : [Ora] Data을 Numeric로 변환

TOP 1                                                                    : [Syb] 첫 Row Return

TRUNCATE TABLE TblNm                                         : TblNm의 모든 데이터 삭제

UNION                                                                    : SELECT 결과 APPEND - 교집합

UNION ALL                                                             : SELECT 결과 APPEND
UPDATE TblNm SET Col1='xxx', Col2='yyy'                 : TblNm의 Col1, Col2 Update
UPDATE STATISTICS TblNM                                     : TblNm 통계 갱신

UPDATE Tbl1                                                          : [Syb] Join Update

Set Col1 = Col2

FROM Tbl1 INNER JOIN Tbl2

ON Tbl1.Key1 = Tbl2.Key2
UPPER()                                                                : 대문자로 변환

USE DB_Nm                                                           : DB_nm으로 이동

반응형

sybase>$isql -Usa


use master
go


# size 단위는 block (1024 = 2M) 이다. 500000 은 약 1G
disk init name = "TMS_DEV", physname = "/datafile/sybase/dev/TMS_DEV.dat", size = 500000
go

disk init name = "TMS_LOG", physname = "/datafile/sybase/dev/TMS_LOG.dat", size = 50000
go


# size 단위는 Mbyte
create database TMS on TMS_DEV = 1024 log on TMS_LOG = 100
go


sp_addlogin tmsadmin, tmsadmin, TMS
go


use TMS
go

sp_changedbowner tmsadmin, true
go

use master
go
sp_dboption TMS, "trunc log on chkpt", true
go

use TMS
go
checkpoint
go

use master
go
sp_dboption TMS, "allow nulls by default", true
go

use TMS
go    
checkpoint
go

use master
go 
sp_dboption TMS, "select into/bulkcopy/pllsort", true
go

use TMS
go
checkpoint
go

use master
go
sp_dboption TMS, "abort tran on log full", true
go

use TMS
go
checkpoint
go

반응형

sp_activeroles :

사용자의 로그인에 부여된 현재 (role) 모두 표시합니다.

sp_addalias:

Adaptive Server 사용자가 데이터베이스에서 다른 사용자 이름으로 인식되는 것을 허용합니다.

sp_addauditrecord :

사용자가 사용자 정의 감사 레코드(주석) 감사 기록에 입력하는 것을 허용합니다.

sp_addaudittable:

감사 기능을 설치한 다른 시스템 감사 테이블을 추가합니다.

sp_addengine :

엔진을 기존 엔진 그룹에 추가하거나, 엔진 그룹이 없으면 엔진 그룹을 만들어 엔진을 추가합니다.

sp_addexeclass :

클라이언트 응용 프로그램, 로그인, 내장 프로시저에 바인드할 있는 사용자 정의 실행 클래스를 만들거나 업데이트합니다.

sp_addextendedproc :

확장 내장 프로시저(ESP) master 데이터베이스에 만듭니다.

sp_addexternlogin :

CIS(Component Integration Services) 통해 원격 서버와 통신할 사용할 대체 로그인 계정과 암호를 만듭니다.

sp_addgroup :

그룹을 데이터베이스에 추가합니다. 그룹은 권한을 부여하거나 취소할 집합적 이름으로 사용됩니다.

sp_addlanguage :

대체 언어의 월과 요일의 이름과 날짜 형식을 정의합니다.

sp_addlogin :

사용자 계정을 Adaptive Server 추가합니다.

sp_addmessage :

내장 프로시저 print raiserror 호출과 sp_bindmsg에서 사용할 있도록 사용자 정의 메시지를 sysusermessages 추가합니다.

sp_addobjectdef :

로컬 테이블과 외부 저장 위치 사이의 매핑을 지정합니다.

sp_add_qpgroup :

Abstract Plan(AP) 그룹을 추가합니다.

sp_addremotelogin : master.dbo.sysremotelogins 엔트리를 추가하여 원격 서버 사용자에게 권한을 부여합니다.

sp_add_resource_limit :

질의나 질의 배치, 트랜잭션을 실행할 로그인이나 응용 프로그램에서 사용할 있는 서버 자원의 양에 대한 제한을 만듭니다.

sp_addsegment :

현재 데이터베이스의 데이터베이스 디바이스에 세그먼트를 정의합니다.

sp_addserver :

원격 서버를 정의하거나 로컬 서버의 이름을 정의합니다.

sp_addthreshold :

데이터베이스 세그먼트에 있는 공간을 모니터하기 위한 임계값을 만듭니다. 세그먼트의 여유 공간이 지정한 수준 아래로 내려가면, Adaptive Server 연관된 내장 프로시저를 실행합니다.

sp_add_time_range :

이름이 지정된 시간 범위를 Adaptive Server 추가합니다.

sp_addtype :

사용자 정의한 데이터 유형을 만듭니다.

sp_addumpdevice  :

덤프 디바이스를  Adaptive Server 추가합니다.

sp_adduser :

사용자를 현재 데이터베이스에 추가합니다.

sp_altermessage :

특정 시스템 정의 메시지나 사용자 정의 메시지를 Adaptive Server 에러 로그에 기록할 있게 하거나 기록할 없게 합니다.

sp_audit :

시스템 보안 담당자가 감사 선택 항목을 구성할 있게 해줍니다.

sp_autoconnect :

이름이 지정된 사용자가 로그인할 자동으로 passthrough 모드로 들어갈 있도록, 특정 사용자에게 원격 서버에 대한  passthrough 연결을 정의해 줍니다.

sp_bindcache :

데이터베이스나 테이블, 인덱스, text 객체, image 객체를 데이터 캐시에 바인드합니다.

sp_bindefault :

사용자 정의 디폴트를 열이나 사용자 정의 데이터 유형에 바인드 합니다.

sp_bindexeclass  :

실행 클래스를 클라이언트 응용 프로그램이나 로그인,, 내장 프로시저와 연관시킵니다.

sp_bindmsg :

사용자 메시지를 참조 무결성 제약 조건이나 검사 제약 조건에 바인드합니다.

sp_bindrule :

규칙을 열이나 사용자 정의 데이터 유형에 바인드 합니다.

locksp_cacheconfig :

데이터 캐시에 대한 정보를 만들거나 구성, 다시 구성, 삭제, 제공을 합니다.

sp_cachestrategy :

테이블이나 인덱스 text 객체, image 객체에 대한 MRU 캐시 대체 전략과 프리페치(대량 /출력) 가능하게 하거나 가능하지 않게 합니다.

sp_changedbowner :

데이터베이스의 소유자를 변경합니다.

sp_changegroup :

사용자 그룹을 변경합니다.

sp_checknames :

7-비트 ASCII 집합에 없는 문자가 이름에 들어 있는지 현재 데이터베이스를 검사합니다.

sp_checkreswords :

Transact-SQL 예약어인 식별자를 검색하여 표시합니다. 서버 이름과 디바이스 이름, 데이터베이스 이름, 세그먼트 이름, 사용자 정의 데이터 유형, 객체 이름, 이름, 사용자 이름, 로그인 이름, 원격 로그인 이름을 검사합니다.

sp_checksource :

컴파일된 객체 소스 텍스트 있는지 검사합니다.

sp_chgattribute :

테이블이나 인덱스의 추후 공간 할당을 위해 max_rows_per_page 값을 변경합니다.

sp_clearpsexe :

sp_setpsexe에서 설정한 클라이언트 응용 프로그램, 로그인, 내장 프로시저의 실행 속성을 지웁니다.

sp_clearstats :

모든 서버 사용자나 지정한 사용자에 대한 계정 기간을 시장합니다. sp_reportstats 실행하여 이전 기간 동안의 통계를 인쇄합니다.

sp_cmp_all_qplans :

모든 Abstract Plan(AP) 개의 Abstract Plan(AP) 그룹에서 비교합니다.

sp_cmp_qplans : 개의 Abstract Plan(AP) 비교합니다.

sp_commonkey :

개의 테이블이나 사이의 자주 조인되는 common 열을 정의합니다.

sp_companion :

Adaptive Server 고가용성(HA) 시스템의 보조 companion으로 구성하고 companion 서버를 failover 모드에서 다른 모드로 이동하는 등의 클러스터 작업을 수행합니다.

sp_configure : 구성 매개변수를 표시하거나 변경합니다.

sp_copy_all_qplans :

Abstract Plan(AP) 그룹의 모든 계획을 다른 그룹으로 복사합니다.

sp_copy_qplan :

Abstract Plan(AP) Abstract Plan(AP) 그룹으로 복사합니다.

sp_countmetadata :

Adaptive Server 인덱스, 객체, 데이터베이스 개수를 표시합니다.

sp_cursorinfo :

사용자 세션에서 활성 중인 특정 커서나 모든 커서에 대한 정보를 보고합니다.

locksp_dboption : 데이터베이스 옵션을 표시하거나 변경합니다.

sp_dbremap :

alter database에서 만든 변경 내용을 Adaptive Server에서 인식하게 만듭니다. Adaptive Server 메시지에서 지시한 경우에만 프로시저를 실행합니다.

sp_depends :

특정 테이블이나 뷰에 종속된 , 트리거, 프로시저와 특정 , 트리거, 프로시저가 종속되어 있는 테이블이나 뷰와 가타은 데이터베이스 객체 종속 관계에 대한 정보를 표시합니다.

sp_deviceattr :

기존 데이터베이스 디바이스 파일의 dsync 설정을 변경합니다.

sp_diskdefault :

사용자가 데이터베이스 디바이스를 지정하지 않은 경우 데이터베이스 디바이스를 데이터베이스 저장소로 사용할 있는지 여부를 지정하거나, create database alter database 명령의 default 지정합니다.

sp_displayaudit : 감사 선택 항목의 상태를 표시합니다.

sp_displaylevel :

sp_configure 출력에 나타나야 Adaptive Server 구성 매개변수를 설정하거나 표시합니다.

sp_displaylogin : 로그인 계정에 대한 정보를 표시합니다.

sp_displayroles :

다른 (role) 부여된 모든 (role) 표시하거나 (role) 전체 계층 트리를 형식으로 표시합니다.

sp_dropalias :

sp_addalias 사용하여 설정했던 가명(alias) 사용자 이름을 삭제 합니다.

sp_drop_all_qplans :

모든 Abstract Plan(AP) Abstract Plan(AP) 그룹에서 삭제합니다.

sp_dropdevice :

Adaptive Server 데이터베이스 디바이스나 덤프 디바이스를 삭제 합니다.

sp_dropengine :

지정한 엔진 그룹에서 엔진을 삭제하거나 해당 엔진이 그룹의 마지막 엔진인 경우 엔진 그룹을 삭제합니다.

sp_dropexeclass : 사용자 정의 실행 클래스를 삭제합니다.

sp_dropextendedproc : Master database에서 ESP 삭제합니다.

sp_dropglockpromote :

데이터베이스나 테이블에서 lock 실행 값을 삭제합니다.

sp_dropgroup : 데이터베이스에서 그룹을 삭제합니다.

sp_dropkey :

syskeys 테이블에서 sp_primarykey sp_foreignkey, sp_commonkey 정의한 키를 삭제합니다.

sp_droplanguage :

서버에서 대체 언어를 삭제하고 해당 행을 master.dbo.syslanguages에서 삭제합니다.

sp_droplogin :

사용자 엔트리를 master.dbo.syslogins에서 삭제하여 Adaptive Server 사용자 로그인을 삭제합니다.

sp_dropmessage : 사용자 정의 메시지를 sysusermessages에서 삭제합니다.

sp_drop_qpgroup : Abstract Plan(AP) 그룹을 삭제합니다.

sp_drop_qplan : Abstract Plan(AP) 삭제합니다.

sp_dropremotelogin : 원격 사용자 로그인을 삭제합니다.

sp_drop_resource_limit :

하나 이상의 자원 제한값을 Adaptive Server에서 삭제합니다.

sp_dropsegment :

데이터베이스에서 세그먼트를 삭제하거나 세그먼트를 특정 데이터베이스 디바이스에서 매핑 해제합니다.

sp_dropserver : 알려진 서버 목록에서 서버를 삭제합니다.

sp_dropthreshold : 세그먼트에서 여유 공간 임계값을 삭제합니다.

sp_drop_time_range :

Adaptive Server에서 사용자 정의 시간 범위를 삭제합니다.

sp_droptype : 사용자 정의 테이터 유형을 삭제합니다.

sp_dropuser : 현재 데이터베이스에서 사용자를 삭제합니다.

sp_dumpoptimize :

데이터베이스 덤프 작업 중에 Backup Server에서 덤프하는 데이터 크기를 지정합니다.

sp_estspace :

테이블과 테이블 인덱스에 필요한 공간의 크기와 인덱스를 만드는데 필요한 시간을 추정합니다.

sp_export_qpgroup :

지정한 사용자와 Abstract Plan(AP) 그룹에 대한 모든 계획을 사용자 테이블로 내보냅니다.

sp_extendsegment :

세그먼트의 범위를 다른 데이터베이스 디바이스로 확장합니다.

sp_familylock :

구문을 병렬로 실행하는 패밀리(조정 프로세스와 작업자 프로세스)에서 보유하는 모든 lock 대한 정보를 보고합니다.

sp_find_qplan :

질의 텍스트나 계획 텍스트에서 파생된 패턴인, Abstract Plan(AP) 찾습니다.

sp_flushstats :

메모리내에서 systabstats 시스템 테이블로 통계를 전달합니다.

sp_forceonline_db :

복구로 인해 오프라인으로 전환되었던 데이터베이스의 모든 페이지에 대한 액세스를 제공합니다.

sp_forceonline_page :

복구로 인해 오프라인으로 전환되었던 페이지에 대한 액세스를 제공합니다.

sp_foreignkey : 현재 데이터베이스의 테이블이나 뷰에 외부키를 정의합니다.

sp_freedll :

ESP 실행을 지원하기 위해 XP Server 메모리에 로드되었던 동적 연결 라이브러리(DLL) 언로드합니다.

sp_getmessage :

print raiserror 문의 sysmessages sysusermessages에서 저장 메시지 문자열을 검색합니다.

sp_grantlogin :

Windows NT 전용으로 통합 보안 모드나 혼합 모드(Named

Pipes 사용하여) 활성화되어 있으면 Adaptive Server (role)이나 default 권한을 Windows NT 사용자 그룹에 할당합니다.

sp_ha_admin :

고가용성(HA) 시스템에서 Sybase failover 구성되어 있는 Adaptive Server 관리 작업을 수행합니다. sp_ha_admin installhavss 스크립트(Windows NT에서는 insthasv) 함께 설치됩니다.

sp_help :

데이터베이스 객체(sysobjects 나열되어 있는 모든 객체) 대한 정보와 Adaptive Server 제공 데이터 유형이나 사용자 정의 데이터 유형에 대한 정보를 보고합니다.

sp_helpartition :

partition 테이블의 partition 대한 페이지와 컨트롤 페이지를 나열합니다.

sp_helpcache :

데이터 캐시에 바운드되어 있는 객체에 대한 정보나 지정한 캐시 크기에 필요한 오버헤드 크기에 대한 정보를 표시합니다.

sp_helpdb :

특정 데이터베이스나 모든 데이터베이스에 대한 정보를 보고합니다.

sp_helpdevice :

특정 디바이스에 대한 정보나 모든 Adaptive Server 데이터베이스 디바이스와 덤프 디바이스에 대한 정보를 보고합니다.

sp_helpextendedproc :

현재 데이터베이스에 등록된 ESP 관련 DLL 파일과 함께 표시합니다.

sp_helpexternlogin :

CIS(Component Integration Services) 전용으로 외부 로그인 이름에 대한 정보를 보고합니다.

sp_helpgroup :

현재 데이터베이스의 모든 그룹에 대한 정보나 특정 그룹에 대한 정보를 보고합니다.

sp_helpindex : 테이블에 만든 인덱스에 대한 정보를 보고합니다.

sp_helpjava :

데이터베이스에 설치되어 있는 Java 클래스와 관련 JAR 대한 정보를 표시합니다.

sp_helpjoins :

조인 대상이 가능성이 있는 개의 테이블이나 뷰의 열을 나열 합니다.

sp_helpkey :

특정 테이블이나 뷰의 Primary , 외부키, common 키에 대한 정보나 현재 데이터베이스의 모든 키에 대한 정보를 보고합니다.

sp_helplanguage : 특정 대체 언어나 모든 언어에 대한 정보를 보고합니다.

sp_helplog :

트랜잭션 로그의 페이지가 들어 있는 디바이스의 이름을 보고합니다.

sp_helpobjectdef :

CIS(Component Integration Services) 전용으로 원격 객체 정의에 대한 정보를 보고합니다. 소유자, 객체, 유형, 정의를 표시합니다.

sp_help_qpgroup : Abstract Plan(AP) 그룹에 대한 정보를 보고합니다.

sp_help_qplan : Abstract Plan(AP) 대한 정보를 보고합니다.

sp_helpremotelogin :

특정 원격 서버의 로그인이나 모든 원격 서버의 로그인에 대한 정보를 보고합니다.

sp_help_resource_limit :

모든 자원 제한값이나 주어진 로그인이나 응용 프로그램에 대한 제한값, 주어진 시간이나 요일에 유효한 제한값, 주어진 범위나 작업의 제한값에 대한 정보를 보고합니다.

sp_helprotect :

데이터베이스 객체, 사용자, 그룹, (role) 대한 권한을 보고합니다.

sp_helpsegment :

현재 데이터베이스의 모든 세그먼트나 특정 세그먼트에 대한 정보를 보고합니다.

sp_helpserver : 특정 원격 서버나 모든 원격 서버에 대한 정보를 보고합니다.

sp_helpsort :

Adaptive Server 기본 정렬 순서와 문자 집합을 표시합니다.

sp_helptext :

시스템 프로시저나 트리거, , 디폴트, 규칙 무결성 검사 제약 조건의 텍스트를 인쇄합니다.

sp_helpthreshold :

현재 데이터베이스의 모든 임계값이나 특정 세그먼트의 모든 임계값과 관련된 세그먼트, 여유 공간 , 상태, 내장 프로시저를 보고합니다.

sp_helpuser :

현재 데이터베이스의 모든 사용자나 특정 사용자에 대한 정보를 보고합니다.

sp_import_qpgroup :

Abstract Plan(AP) 사용자 테이블에서 Abstract Plan(AP) 그룹으로 가져옵니다.

sp_indsuspect :

정렬 순서 변경을 복구 중에 추정으로 표시된 인덱스가 있는지 사용자 테이블에서 검사합니다.

sp_listsuspect_db :

복구 손상으로 인해 오프라인 페이지가 들어 있는 데이터베이스를 모두 나열합니다.

sp_listsuspect_page :

복구 손상으로 인해 현재 오프라인 페이자가 들어 있는 페이지를 모두 나열합니다.

sp_lock : 현재 lock 보유하고 있는 프로세스에 대한 정보를 보고합니다.

sp_locklogin :

사용자가 로그인할 없게 Adaptive Server 계정을 잠그거나 모든 잠궈진 계정의 목록을 표시합니다.

sp_logdevice :

로그 데이터를 같은 디바이스에 가지고 있는 데이터베이스의 트랜잭션 로그를 별개의 데이터베이스 디바이스로 이동합니다.

sp_loginconfig :

Windows NT 전용으로 하나 또는 모든 통합 보안 매개변수의 값을 표시합니다.

sp_logininfo :

Windows NT 전용으로 sp_grantlogin 사용하여 Windows NT 사용자와 그룹에 부여된 모든 (role) 표시합니다.

sp_logiosize :

Adaptive Server에서 현재 데이터베이스의 트랜잭션 로그에 대한 /출력을 사용하는 로그 /출력 크기를 다른 메모리 풀로 변경합니다.

sp_modifylogin :

Adaptive Server 로그인 계정의 Primary database 기본 언어, 기본 (role) 사용이나 전체 이름을 수정합니다.

sp_modify_resource_limit :

제한값을 지정하거나 제한값이 초과했을 취할 조치 또는 둘을 모두 지정하여 자원 제한값을 변경합니다.

sp_modifythreshold :

임계값을 다른 임계값 프로시저와 여유 공간 수준, 세그먼트 이름과 연결하여 수정합니다. sp_modifythreshold 사용하여 마지막 임계값의 세그먼트 이름이나 여유 공간 크기를 변경 없습니다.

sp_modify_time_range :

이름이 지정된 시간 범위와 관련된 시작일, 시작 시간, 종료일, 종료 시간 등을 변경합니다.

sp_monitor : Adaptive Server 대한 통계를 표시합니다.

sp_password :

Adaptive Server 로그인 계정의 암호를 추가하거나 변경합니다.

sp_placeobject :

테이블이나 인덱스의 추후 공간 할당을 특정 세그먼트에 둡니다.

sp_plan_dbccdb :

dbccdb dbccalt 데이터베이스의 적합한 크기를 권장하고 dbccdb dbccalt 적절한 디바이스를 나열하며 캐시 크기와 대상 데이터베이스의 작업자 프로세스의 적당한 개수를 제안합니다.

sp_poolconfig :

데이터 캐시 내에서 메모리 풀에 대한 정보를 제공하고, 크기를 다시 조정하고, 삭제하며 만듭니다.

sp_primarykey : 테이블이나 뷰에 Primary 키를 정의합니다.

sp_processmail :

Windows NT 전용으로 Adaptive Server 받은 편지함의 메시지를 읽고 처리하고 전송하며 삭제합니다.

sp_procqmode : 내장 프로시저, , 트리거의 질의 처리 모드를 표시합니다.

sp_procxmode :

내장 프로시저와 관련된 트랜잭션 모드를 표시하거나 변경합니다.

sp_recompile :

이름이 지정된 테이블을 사용하는 내장 프로시저와 트리거가 다음에 실행될 다시 컴파일되게 합니다.

sp_remap :

4.8 이상과 10.0 이전의 내장 프로시저나 트리거, 규칙, 디폴트, 뷰가 10.0 이상 릴리스와 호환될 있도록 다시 매핑합니다. 릴리스 11.0 업그레이드 절차에서 다시 매핑하는 실패한 11.0 이전 릴리스 객체에 대해서는 sp_remap 사용하십시오.

sp_remoteoption : 원격 로그인 옵션을 표시하거나 변경합니다.

sp_rename :

현재 데이터베이스에 있는 사용자의 구성 객체나 사용자 정의 데이터 유형의 이름을 변경합니다.

sp_renamedb :

데이터베이스 이름을 변경합니다. 시스템 테이터베이스 이름이나 외부 참조 무결성 제약 조건이 있는 테이터베이스의 이름은 변경 없습니다.

sp_rename_qpgroup : Abstract Plan(AP) 그룹의 이름을 바꿉니다.

sp_reportstats : 시스템 사용량에 대한 통계를 보고합니다.

sp_revokelogin :

Windows NT 전용으로 통합 보안 모드나 혼합모드(Named Pipes 사용하여) 활성화되어 있으면 Windows NT 사용자와 그룹에서 Adaptive Server (role) 기본 권한을 취소합니다.

sp_role :

Adaptive Server 로그인 계정에 시스템 (role) 부여하거나 취소합니다.

sp_serveroption : 원격 서버 옵션을 표시가거나 변경합니다.

sp_setlangalias : 대체 언어의 가명(alias) 지정하거나 변경합니다.

sp_setpglockpromote :

데이터베이스나 테이블, Adaptive Server lock 실행 임계값을 설정하거나 변경합니다.

sp_setpsexe :

활성 클라이언트 응용 프로그램과 로그인, 내장 프로시저의 사용자 정의 실행 속성을 바로설정합니다.

sp_set_qplan :

연관된 질의를 변경하지 않고 기존 계획의 Abstract Plan(AP) 텍스트를 변경합니다.

sp_setsuspect_granularity : 복구 장애 결리 모드를 표시하고 설정합니다.

sp_setsuspect_threshold :

복수 , 전체 데이터베이스를 오프라인으로 전환하기 전에 Adaptive Server 지정한 데이터베이스에서 허용할 최대 추정 페이지 개수를 설정합니다.

sp_showcontrolinfo :

엔진 그룹 할당, 바운드 클라이언트 응용 프로그램, 로그인, 내장 프로시저에 대한 정보를 표시합니다.

sp_showexeclass :

지정한 실행 클래스와 연관된 엔진 그룹의 엔진과 실행 크래스 속성을 표시합니다.

sp_showplan :

현재 SQL (또는 같은 배치의 이전 구문) 사용자 연결에 대한 질의 계획을 표시합니다. 질의 계획은 showplan 형식으로 표시됩니다.

sp_showpsexe :

Adaptive Server에서 실행되는 모든 프로세스에 대한 실행 클래스, 현재 우선 순위, 연결을 표시합니다.

sp_spaceused :

현재 데이터베이스의 테이블이나 모든 테이블에서 사용하는 예상 , 예상 데이터 페이지 예상 공간 값을 표시합니다.

sp_syntax :

Transact-SQL 문의 구문, 시스템 프로시저, 유틸리티, 기타 루틴을 Adaptive Server 있는 제품과 해당 sp_syntax 스크립트에 따라 표시합니다.

sp_sysmon : 성능 정보를 표시합니다.

sp_thresholdaction :

임계값이 다른 프로시저와 연관되어 있지 않은 경우, 로그 세그먼트의 사용 가능한 페이지 개수가 마지막 임계값 아래로 떨어지면 자동으로ㅗ 실행합니다. Sybase에서는 프로시저를 제공하지 않습니다.

sp_transactions :

활성 트랜잭션에 대한 정보를 보고합니다.

sp_unbindcache :

데이터베이스나 테이블, 인덱스, text 객체, image 객체를 데이터 캐시에서 바인드 해제합니다.

sp_unbindcache_all :

캐시에 바운드되어 있는 모든 객체를 바인드 해제합니다.

sp_unbindefault :

생성된 디폴트를 열이나 사용자 정의 데이터 유형에서 바인드 해제합니다.

sp_unbindexeclass :

데이터베이스나 테이블, 인덱스, text 객체나 image 객체를 데이터 캐시에서 바인드 해제합니다.

sp_unbindmsg :

사용자 정의 메시지를 제약 조건에서 바인드 해제합니다.

sp_unbindrule :

규직을 열이나 사용자 정의 데이터 유형에서 바인드 해제합니다.

sp_volchanged :

요청한 볼륨 처리를 덤프나 로드 중에 운영자가 수행했다는 것을 Backup Server™ 통보합니다.

sp_who :

모든 현재 Adaptive Server 사용자와 프로세스에 대한 정보, 특정 사용자 또는 프로세스에 대한 정보를 보고합니다.


반응형

강좌 시작 >

준비사항

먼저 그림과 같이 Sybase를 사용할 수 있는 Client-Program을 설치해야 합니다. Oracle을 접근하기 위해서는 Oracle-Client 프로그램을 설치하는 것과 마찬가지입니다. 음.. 준비사항이라고 적기는 했는데 이외에는 별다른 사항은 없네요. (머슥 ㅡㅡ;;)

SyBase 연결

SyBase에 연결하기 위해서는 세가지 정도의 방법이 있습니다.

  1. ODBC Data-Provider For .NET
  2. OLEDB Provider For .NET
  3. ASA Provider(From SyBase)

OLEDB는 .NET Framework 1을 설치하면 SQL Data-Provider For .NET과 같이 기본적으로 설치되는 드라이버입니다. 기존의 두 드라이버 이외에 .NET에는 ODBC 와 Oracle 버전이 추가로 제공되었는데, 이번에 .NET Framework 1.1이 나오면서 기본 드라이버로 추가되었습니다.

마지막으로 3번은 SyBase에서 제공하는 .NET용 Data-Provider인데, www.sybase.com에서 다운로드 받을 수 있습니다.

먼저 ODBC를 통해서 Sybase에 연결하는 방법을 알아보겠습니다. ODBC 설정을 위해서 그림과 같이 ODBC관리자를 열고,

해당 정보를 입력합니다.

연결 테스트를 통해 연결을 확인합니다.

확인 되었다면 CSharp을 통해서 연결해 보죠.

Code1. ODBC Connection

OdbcConnection Conn=null;
Conn=new OdbcConnection("DSN=arnold_connection");

기존의 Com에서 ODBC를 사용해서 연결했던 내용과 별 차이가 없네요. OLEDB를 통해서도 Connection을 연결하는 방법은

Code2. OLEDB Connection

OleDbConnection Conn=new OleDbConnection("Provider=ASAProv.70;Data Source= arnold;"+"UserID=arnold;Password=pwd;");

음. 별 차이가 없군요. ㅡㅡ;;; SyBase에서 제공하는 ASA를 통해서 접근하는 방식은 OLEDB를 접근하는 방식과 Connection-String은 동일합니다. 단지 OLEDB대신 ASA이라는 접두사가 붙습니다.

Provider별 성능을 비교한 문서가 없어서 정확히 말씀은 드리지 못하겠지만 일반적인 경우를 생각해 볼 때 SyBase를 통해 제공되는 provider를 사용하는 것을 권하고 싶네요.

Stored-Procedure 사용하기

저장 프로시저 사용의 경우 MSSQL이나 Oracle을 사용하는 경우와 별로 차이가 없습니다. 한가지 주의하실 점은 ODBC나 ASA Driver를 사용하는 경우에는 SP를 호출하는 부분의 Syntax가 조금 차이가 있다는 점이죠. SyBase에만 해당하는 특별한 사항은 아니고, ODBC를 통해서 접근하는 경우에 공통적인 사항입니다.

Code3. Call SP OdbcCommand Comm=new OdbcCommand("{call test_procedure(?,?)} ",Conn);
// Comm에 Parameter할당~

MSSql을 사용 시 Sp명만 적어주고, Parameter를 할당하는 것과는 조금 차이가 있습니다. ?를 사용해서 Parameter의 위치를 미리 지정하고 Parameter를 Command에 할당해서 사용하는 방식입니다.

문제는 지금부터 인데 다음과 같은 저장 프로시저가 있다고 생각해 보죠.

Code4. Stored-Procedure

create procedure test1(@code char(05),
                                      @out int out)
begin
     if @code=null then
         return (-1); 
     end if;

      select count(*) into @out from test;

      if @code='all' then
          select *
          from test;
     else
          select *
          from test
         where code=@code;
     end if;
     return(100);
end;

프로시저에서는 세 가지 값을 Client에게 리턴합니다.

  1. output-parameter
  2. return value
  3. select를 통한 결과

2)번의 경우는 프로시저가 정상적으로 실행되었는지를 확인하는 값입니다. 위의 프로시저를 호출하는 코드는 다음과 같습니다.

Code5. Call SP2

OdbcDataAdapter Adapter=new OdbcDataAdapter();
OdbcCommand Comm=new OdbcCommand("{?=call sp_test(?,?)} ",Conn);
Comm.CommandType=CommandType.StoredProcedure;
// Parameter Setting
Comm.Parameters.Add("return",OdbcType.Real,4);
Comm.Parameters["return"].Direction=ParameterDirection.ReturnValue;

Comm.Parameters.Add("@code",OdbcType.VarChar,5);
Comm.Parameters["@code"].Value=strCode;

Comm.Parameters.Add("@out",OdbcType.Real,4);
Comm.Parameters["@out"].Direction=ParameterDirection.Output;

음.. 문제가 발생하는 부분은 위와 같이 동시에 세 개를 리턴 받는 경우입니다. 다음은 테스트 한 결과입니다.(테스트 시나리오 별로 각 각의 프로시저 작성)

  1. output parameter만 받는 경우: 정상적으로 리턴.
  2. return value만을 받는 경우: 정상적으로 리턴.
  3. output + return value를 받는 경우: 정상적으로 리턴
  4. select 만을 받는 경우: 정상적으로 리턴
  5. output + select: select만 리턴됨.
  6. return + select : select만 리턴됨
  7. output + select + return : select 만 리턴됨

즉, 요약해 보면 select와 output/return값은 동시에 출력되지 않는다는 결과입니다. 동일한 프로시저를 MSSQL에서 작성해서 테스트 해보면 세 개의 값이 정상적으로 리턴 되는 것을 확인하였습니다.

특정 Provider의 문제인가 싶어서 앞에서 열거한 Provider별로 모두 테스트를 해보았지만, 결과는 동일 (ㅡㅡ);;. SyBase에 문의해 본 결과 ASA 7.0 Engine 의 경우에는 아직 .NET에서 certified되지 않은 상태라고 하네요. 지용군님을 비롯한 주위분들 얘기를 들어보면 Provider에 따라서 위의 기능이 제공되지 않을 수도 있다고 하는군요. 물론 DB자체에서는 실행이 되겠지만 DB에서 실행되는 것과 특정 Provider를 통해 제공되는 기능이 꼭 같다고 볼 수는 없다는 것이죠.

이러한 문제 때문에 조금 우회한 방식으로 처리를 하게 되었습니다.

Return과 Output Parameter를 사용하는 대신 Select 구문으로 대치해서 DataSet에 담는 방식으로 처리를 했습니다. 즉, Output Parameter나 Return 구문은 Select 구문으로 치환해서 결과적으로 DataSet에는 3개의 테이블이 들어가 있는 것이죠.

.NET에서 Sybase 접근방식에 대해서 간단히 알아보았습니다. 그럼 ㅃㅃ2

반응형

select col1, col2, col3 from tab order by col1, col2

                 

         compute sum(col3) by col1

반응형

7.3 ASIQ에서의 Transaction Mode

 

7.3.1 ‘Auto_Commit’ & ‘Chained’ Option 따른 변화

 

Auto_commit

Chained

    

On

On

Begin

 Insert aa values('A1');

 Insert ab values('A1');   ß Error발생

End

=> Query 두번째 Insert문장의 Error발생으로 ‘Begin

~End’ 사이의 모든 내용이 자동적으로 rollback된다.

Off

On

Begin

 Insert aa values('A1');

 Insert ab values('A1');   ß Error발생

End

/* Rollback; */

=> Query 두번째 Insert문장에서 Error 발생했으나  첫번째 Insert Insert 되어버린다, 뒤에 Rollback

실행하여 Rollback 있다.

On  , Off

Off

Begin

 Insert aa values('A1');

 Insert ab values('A1');   ß Error발생

End

/* Rollback; */

=> Query수행 결과는 ‘Chained=’Off’’ 의해 첫번째 insert 문은 정상적으로 수행한다. 경우 ‘Begin~End’뒤에 Rollback 첫번째 Insert

 rollback하지 못한다.

Off

On

(Begin ~ End 없는 경우)

Update TEST set a = 2 ,b = 21  WHERE a = 1 ;

Rollback ;

 

=> 위의 결과는 rollback 작용해 Update 안된다.

이유는 Update 실행되고 Auto_commit ‘Off’

의해Commit 없이 Rollback 실행된다.

On

On

(Begin ~ End 없는 경우)

Update TEST set a = 2 ,b = 21  WHERE a = 1 ;

Rollback ;

 

=> 위의 결과는 Update 이미 ‘Commit’되어 완료된

상태이므로 rollback 무의미 해진다.

On  , Off

Off

(Begin ~ End 없는 경우)

Update TEST set a = 2 ,b = 21  WHERE a = 1 ;

Rollback ;

 

=> Query수행 결과는 ‘Rollback’ 문장이 있지만

Update 수행된다. Chained mode ‘Off’ 이므로

Begin~End 내에 있는 문장이 개별로 처리됨

.




출처 : sybase

+ Recent posts