관계 데이터베이스 SQL 의 프로 그래 밍 가능 한 사무
앞의 관계 데이터베이스 SQL 의 프로 그래 밍 가능 함수 (사용자 정의 함수) 는 관계 형 데이터 베 이 스 는 프로 그래 밍 가능 한 함수, 저장 과정, 사무, 트리거 와 커서 를 제공 합 니 다. 앞에서 함수, 저장 과정 을 소 개 했 습 니 다. 본 고 는 업무 의 사용 을 소개 합 니 다.(아니면 앞의 은행 시스템 을 예 로 들 면)
개술
하나의 논리 작업 단원 으로 실행 되 는 일련의 조작 을 말한다. 완전히 실행 하거나 완전히 실행 하지 않 는 다.하나의 논리 적 작업 단원 이 업무 가 되 려 면 이른바 ACID (원자 성, 일치 성, 격 리 성과 지속 성) 특성 을 만족 시 켜 야 한다.
문법
시작 사무: 사무 가 시작 되 는 위 치 는 하나의 논리 작업 단원 의 시작 입 니 다.스크롤 백 트 랜 잭 션: 데 이 터 를 트 랜 잭 션 이 시 작 된 상태 로 복원 하 는 것 입 니 다. 일반적으로 조건 이 충족 되 지 않 거나 오류 가 발생 했 을 때 이 작업 을 수행 합 니 다.제출 사무: 업무 가 끝 난 위 치 는 하나의 논리 작업 단원 이 성공 적 으로 실 행 된 후에 데이터 상 태 를 바 꾸 는 것 입 니 다.
--
BEGIN TRAN[SACTION]
-- ,TRAN[SACTION]
ROLLBACK TRAN[SACTION]
--
COMMIT TRAN[SACTION]
--
BEGIN TRAN[SACTION]
-- SQL
위의 SQL 문 구 는 적당 한 위치 에
COMMIT TRAN[SACTION]
를 더 해 야 하고 스크롤 백 이 필요 하 다 면 ROLLBACK TRAN[SACTION]
이 있 을 수 있 습 니 다.사 무 는 저장 과정 과 공동으로 사용 할 수 있다.
특성
예시
begin transaction
if exists(select * from sysobjects where name = 'proc_getMoney')
drop procedure proc_getMoney
go
create proc proc_getMoney
@cardId varchar(19),
@tranMoney money
as
declare @balance money
select @balance = LeftMoney from CardInfo where CardID = @cardId
if(@tranMoney <= @balance)
begin
insert into TransInfo values(@cardId,' ',@tranMoney,default)
if(@@ERROR=0)
begin
update CardInfo set LeftMoney = LeftMoney - @tranMoney where CardID = @cardId
if(@@ERROR=0)
begin
commit transaction
print 'OK'
end
end
else
begin
rollback
print 'error'
end
end
else
print ' '
go
exec proc_getMoney '1324 3626 7532 1935',520
go
exec proc_getMoney '1027 3526 1536 1135',520
go
if exists(select * from sysobjects where name = 'proc_openAccount')
drop procedure proc_openAccount
go
create proc proc_openAccount
@CustName varchar(20), --
@IDCard varchar(18), --
@TelePhone varchar(13), --
@Address varchar(50), --
@openMoney money --
as
begin
begin transaction
declare @CustID int,@CardID varchar(19) -- ,
exec proc_getCardNo @CardID output -- , @CardID
--
insert into AccountInfo values
(@CustName,@IDCard,@TelePhone,@Address)
if(@@error != 0)--
rollback--
else
begin
set @CustID = @@identity -- CustID
--
insert into CardInfo values
(@CardID,default,@CustID,' ',getdate(),@openMoney,@openMoney,' ')
if(@@error != 0)
rollback
else
begin
--
insert into TransInfo values
(@CardID,' ',@openMoney,default)
if(@@error != 0)
begin
rollback
print ' , !'
end
else
begin
print ' !'
print ' :' + @CardID
end
end
end
commit transaction
end
go
exec proc_openAccount ' ','422322001550135015','027-8658888',' ',250
go
첨부: 생산 은행 카드 의 저장 과정 을 실현 하고 이 저장 과정 은 랜 덤 으로 카드 번호 출력 을 만 들 수 있 습 니 다.
if exists(select * from sysobjects where name = 'proc_getCardNo')
drop procedure proc_getCardNo
go
create proc proc_getCardNo
@CardNo varchar(19) output --
as
begin
declare @day varchar(2) --
set @day = dateName(dd,getdate())
if @day<10 -- 10, '0'
set @day = '0'+@day
set @CardNo = convert(varchar(9),(dateName(yyyy,getdate())+' '
+ dateName(mm,getdate())))+@day+' '+ convert(varchar(10),(dateName(hh,getdate())
+dateName(mi,getdate())+' '+ subString(convert(varchar(6),rand(datepart(ms,getdate()))*1000000),1,5)))
end
go
declare @card varchar(19)
exec proc_getCardNo @card output
print ' :' + @card
go
본문 은 여기까지 소개 하 겠 습 니 다. 궁금 한 점 이 있 으 면 연락 주세요.
약서
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
관계 데이터베이스 SQL 의 프로 그래 밍 가능 한 사무완전히 실행 하거나 완전히 실행 하지 않 는 다.하나의 논리 적 작업 단원 이 업무 가 되 려 면 이른바 ACID (원자 성, 일치 성, 격 리 성과 지속 성) 특성 을 만족 시 켜 야 한다. 일반적으로 조건 이 충...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.