728x90

1. Primary key

(1) 제약조건 생성

CREATE TABLE sawon
(sano NUMBER(4)          constraint sawon_sano_nn     NOT NULL

,constraint sawon_sano_pk primary key(sano)
);


ALTER TABLE buseo
add constraint buseo_buno_pk primary key(buno);


2. Foreugn key

(1) 제약조건 생성

CREATE TABLE sawon
(,buno NUMBER(2)
,constraint sawon_buno_fk foreign key(buno) references buseo(buno)
 --on delete cascade 1:1에서만 쓴다. <on update cascade는 존재하지 않는다.>
);


ALTER TABLE sawon
add constraint sawon_buno_fk foreign key(buno) references buseo(buno);

(2) 제약조건 삭제

ALTER TABLE [테이블명]
drop constraint [제약조건명];

만약, 다른 테이블을 참조중이라 삭제가 안된다면


SELECT *
FROM user_constraints
WHERE constraint_type='R' AND r_constraint_name='BUSEO_BONO_PK';

우선 검색을 한 후 포린키 제약을 삭제 후 삭제 하면 지워진다.


아니면 casecade를 붙여 주면 자동으로 지워진다.

ALTER TABLE buseo
drop constraint buseo_buno_pk cascade;


3. Unique key

(1) 제약조건 생성

jubun 값이 유니크 속성을 주었지만 NOT NULL 조건을 안주었기 때문에
여러개의 NULL 값이 들어 갈 수 있다.
MS-SQL, MySQL은 2번째부터 NULL 값이 안들어 간다.

CREATE TABLE sawon
(jubun VARCHAR2(13)     constraint sawon_jubun_nn    NOT NULL
,constraint sawon_jubun_uk unique(jubun)   

);


4. Check 제약

(1) 제약조건 생성

CREATE TABLE sawon
(jik VARCHAR2(10)          DEFAULT '사원'
,constraint sawon_jik_ch CHECK(jik IN('사장','부장','과장','대리','사원'))
);


5. Not null 제약

(1) 제약조건 생성

MS-SQL에서는 룰제약 대신 Not null 제약이다.

그래서 일반적으로 테이블을 만들때 Not null 제약을 줄때 제약명을 적어줘야

유지보수하는데 도움이 된다.


CREATE TABLE sawon
(sano NUMBER(4)          constraint sawon_sano_nn     NOT NULL

);


ALTER TABLE sawon
modify constraint saname sawon_saname_nn NOT NULL; --보통은 add지만 NOT NULL 제약은 modify다.


ALTER TABLE sawon
add email VARCHAR(20) DEFAULT ' '
constraint sawon_email_nn NOT NULL;


6. 전체 예문

CREATE TABLE sawon
(sano NUMBER(4)    constraint sawon_sano_nn NOT NULL
,saname VARCHAR2(10) constraint sawon_saname_nn NOT NULL
,jubun VARCHAR2(13) constraint sawon_jubun_nn NOT NULL
,jik VARCHAR2(10) DEFAULT '사원'
,sal NUMBER(4)
,comm NUMBER(4)
,hiredate DATE DEFAULT SYSDATE
,mgr NUMBER(4)
,buno NUMBER(2)
,constraint sawon_sano_pk primary key(sano)
,constraint sawon_jubun_uk unique(jubun)
,constraint sawon_jubun_ch CHECK(TO_NUMBER(jubun)*0=0 AND LENGTH(jubun) =13)
,constraint sawon_jik_ch CHECK(jik IN('사장','부장','과장','대리','사원'))
,constraint sawon_salcomm_ck CHECK ((sal BETWEEN 1000 AND 9999) AND (comm >=0) AND sal > comm)
,constraint sawon_buno_fk foreign key(buno) references buseo(buno)
 --on delete cascade 1:1에서만 쓴다. <on update cascade는 존재하지 않는다.>
,constraint sawon_mgr_fk foreign key(mgr) references sawon(sano)
);


MS-SQL와는 달리 default는 제약조건이 아니고 컬럼이다.

ALTER TABLE sawon
modify jik DEFAULT '사원';

default 값 변경은 위와 같이 한다.


 7. 테이블의 제약조건 확인

SELECT *
FROM user_constraints
WHERE TABLE_name='SAWON';


8. 제약 조건의 삭제

ALTER TABLE [테이블명]
drop constraint [제약조건명]


9. DEFERRED : 제약조건을 바로 적용하지 않고 commit할때 적용한다.

위의 확인결과 중에서 DEFERRABLE 컬럼이 NOT  DEFERRABLE 라면 인서트시 제약 조건을 확인한다.

하지만 부서의 매니져 같이 순서대로 넣지 않으면 제약조건에 위배 될때

매니져 제약조건을 잠시 검사 안하게 하고 전부 삽입 후 체크를 하면 순서 상관 없이 넣을 수 있다.

단, 그때도 위배 되는 것은 rollback시킨다.

그 지정 방법은 아래와 같다.


ALTER TABLE sawon
add constraint sawon_mgr_fk
foreign key(mgr) references SAWON(sano)
deferrable initially DEFERRED;



10. 제약조건명 변경

ALTER TABLE sawon
rename constraint [old제약조건명] TO [new제약조건명];

728x90

출처:http://blog.naver.com/mist80?Redirect=Log&logNo=40013039702

sp_makewebtask
실행된 쿼리에서 반환된 데이터가 들어 있는 HTML 문서를 작성하는 작업을 만듭니다.

을 이용하라~~  MSDN에서 sp_makewebtask 가믄 자세히 나온다...


2005의 경우 호환성을 위해 유지되나 Microsoft SQL Server 2005 Reporting Services(SSRS) 를 사용하여 새 웹 페이지를 보다 쉽게 만들 수 있습니다. (빠른 교체 권장)


그럼 한번 빠져 봅시다!!


사전 작업

1. 첨부한 파일을 다운 받아 C:\에 넣으세요.. 물론 다른곳에 하고 싶으면 알아서 ㅋㅋ

2. 만약 경로가 다르다면 쿼리상에서도 당근 변경해 주셔야 겠죠???


예제 시작

USE pubs


-- A. 템플릿 파일을 사용하여 여러 쿼리 만들기

EXECUTE sp_makewebtask
 @outputfile = 'C:\sp_makewebtask\MULTIPLE.HTM'
 , @query = ' SELECT title, price FROM titles
   SELECT au_lname, au_fname FROM authors
   SELECT pub_id, pub_name FROM publishers
   SELECT au_lname, au_fname FROM authors'
 , @templatefile = 'C:\sp_makewebtask\MULTIPLE.TPL'
 , @dbname = 'pubs',
 @rowcnt = 5,
 @whentype = 9
GO


-- 그럼 확인해 볼까요?? C:\sp_makewebtask로 이동하시면 MULTIPLE.HTM 파일 생겼죠?  신기 신기 ㅋㅋㅋ


-- B. 하이퍼링크 만들기
-- 테이블 생성
CREATE TABLE my_favorite_web_sites(url_def varchar(255), display_text varchar(255) NULL)
GO


-- 등록
INSERT my_favorite_web_sites(url_def, display_text)
VALUES ('http://www.microsoft.com', 'Microsoft Home Page')
INSERT my_favorite_web_sites(url_def) VALUES ('http://www.widgets.microsoft.com')
GO


-- 실행
EXECUTE sp_makewebtask
 @outputfile = 'C:\sp_makewebtask\URL.HTM'
 ,  @query='SELECT title, price FROM titles ORDER BY price desc'
 ,  @table_urls = 1
 , @tabborder = 0
 , @lastupdated=0
 , @colheaders = 0
 , @url_query= 'SELECT url_def, display_text FROM my_favorite_web_sites'
 , @whentype = 9
GO


-- 확인

-- URL.HTM 이라는 파일이 생겼죠? 실행 결과가 나오고... 링크도 걸린거 있죠???

@url_query  부분에 들어간 쿼리는 링크가 걸리는 거예용... 잘만 응용하믄 좋은 결과가 있을듯~~


-- C. 단일 행 모드로 여러 쿼리 실행
EXECUTE sp_makewebtask
   @outputfile = 'C:\sp_makewebtask\SROW.HTM'
 , @query = 'SELECT title, price FROM titles ORDER BY price desc
   SELECT au_lname, au_fname FROM authors WHERE state = ''CA'' '
 , @fixedfont = 0
 , @webpagetitle = 'Single row SQL Web Assistant'
 , @resultstitle = 'One row per page results'
 , @singlerow = 1
 , @rowcnt = 4
 , @URL = 'http://www.microsoft.com'
 , @reftext = 'Microsoft Home Page'
GO


-- 이번엔 Row 단위로 파일이 생겼습니다..

-- 참!! @rowcnt = 4로 주어기 때문에.. 파일이 8개 생겼죠?? 셀렉트문당 4개씩.. ^^

-- 이전 다음 버튼도 잇고 url로 추가해서 링크 걸수 있구용~~ 조아 조아~~


-- D. 데이터 삽입 표식 및 템플릿을 사용하여 여러 쿼리 실행
EXECUTE sp_makewebtask

 @outputfile = 'C:\sp_makewebtask\DATAINS.HTM'
 , @query = 'SELECT title, price FROM titles'
 , @templatefile = 'C:\sp_makewebtask\DATAINS.TPL'
 , @dbname = 'pubs'
 , @rowcnt = 10
 , @whentype = 9
 , @singlerow = 1
GO
-- @singlerow 를 0으로 하거나 지우면 한 파일에 생성되구용... 첫번째 결과랑 비슷하나.. 더욱 좋은 UI를 가져가고 싶다면 이번 방법이 좋겠죠???


MSDN에 나온 예제이구용...

잘만 응용하면 유용하게 쓰일듯 한뎁!! ㅋㅋ

728x90

View안에 StoredProcedure를 쓰는 방법
====================================
가끔sp_addlinkedserver를 구현한다.
다음은 mssql의 odbc를 linkServer로 구현한 것임.
sp_addlinkedserver 
      @server =  'myDB',
      @srvproduct =  '',
      @provider =  'MSDASQL',
      @datasrc = <sys_dsn_name>, --system dsn
      @location =  null,
      @provstr =     'DRIVER={SQL Server};SERVER=*******;UID=*****;PWD=*****;'
--linkserver에 로긴
sp_addlinkedsrvlogin 'myDB', 'false', NULL, '<login_id>', '<login_pwd>'

select * from openQuery (myDB, 'Exec myDB.<db_owner>.<sp_name>')

위의 형태로의 구현을 마쳤다면 view로 만드는 것은 너무도 간단할 것이다.
create view view_name as
 select * from openQuery (myDB, 'Exec myDB.<db_owner>.<sp_name>')
이렇게 하시면 sp가 view속으로 들어온 형태가 된다.

+ Recent posts