데이터 베이스 MySQL 튜토리얼 SQL Server 7.0 시작하기 (7)

SQL Server 7.0 시작하기 (7)

Dec 24, 2016 pm 05:40 PM
sql

i.커서 선언
이 단계에서는 요구 사항에 따라 생성되는 커서의 속성과 결과 집합을 지정해야 합니다. 커서를 지정하는 방법에는 두 가지가 있습니다.
양식 1(ANSI 92)
DECLARE 커서_이름 [INSENSITIVE] [SCROLL] CURSOR
FOR select_statement
[FOR {READ ONLY | UPDATE][OF 열_목록]}]
양식 2
DECLARE 커서_이름 CURSOR
[LOCAL | {읽기 전용 | 업데이트 ][OF 열_목록]}]
INSENSITIVE 키워드는 검색된 결과 집합에 대해 임시 복사본이 생성되고 이 임시 복사본에서 향후 데이터를 얻을 것임을 나타냅니다. 후속 커서 처리 중에 원래 기본 테이블의 데이터가 변경되면 해당 데이터는 커서에 표시되지 않습니다. 이 민감하지 않은 커서는 데이터 변경을 허용하지 않습니다.
SCROLL 키워드는 커서가 어떤 방향으로든 스크롤될 수 있음을 나타냅니다. 모든 가져오기 옵션(첫 번째, 마지막, 다음, 상대, 절대)을 커서에서 사용할 수 있습니다. 이 옵션을 생략하면 커서는 앞으로(다음)만 스크롤할 수 있습니다.
Select_statement는 SQL 문으로 생성된 결과 집합을 지정합니다. Transact SQL 문 COMPUTE, COMPUTE BY, FOR BROWSE 및 INTO는 커서 선언의 select 문에서 허용되지 않습니다.
READ ONLY는 커서 결과 집합에서 데이터 수정이 허용되지 않음을 나타냅니다.
UPDATE 키워드는 커서의 결과 집합을 수정할 수 있음을 나타냅니다.
OF column_list는 수정될 수 있는 결과 집합의 열을 지정합니다. 기본적으로(UPDATE 키워드 사용) 모든 열을 수정할 수 있습니다.
LOCAL 키워드는 커서가 로컬이며 선언된 프로세스 내에서만 사용할 수 있음을 나타냅니다.
GLOBAL 키워드를 사용하면 커서가 전체 연결에 전체적으로 표시됩니다. 연결이 활성화되면 언제든지 전역 커서를 사용할 수 있습니다. 연결이 종료된 경우에만 커서를 더 이상 사용할 수 없습니다.
FORWARD_ONLY는 커서가 앞으로만 스크롤할 수 있도록 지정합니다.
STATIC 커서는 INSENSITIVE 커서와 동일합니다.
KEYSET은 선택한 행의 순서를 지정합니다. SQL Server는 결과 집합에서 임시 키워드 집합을 만듭니다. 데이터베이스의 키워드가 아닌 열을 수정하면 해당 내용이 커서에 표시됩니다. 고정된 키워드 집합이므로 키워드 열의 수정 사항이나 새로 삽입된 열은 표시되지 않습니다.
DYNAMIC은 커서가 결과 세트에 대한 모든 수정 사항을 반영하도록 지정합니다.
SCROLL_LOCK은 커서 작업의 성공을 보장하기 위해 수정 또는 삭제를 잠그는 것입니다.
OPTIMISTIC은 커서를 통한 수정 또는 삭제가 성공하지 못할 것을 지정합니다.
참고:
· SELECT 문에 DISTINCT, UNION 또는 GROUP BY 문이 사용되고 선택 항목에 집계 식이 포함되어 있는 경우 커서는 자동으로 INSENSITIVE 커서가 됩니다.
· 기본 테이블에 고유 인덱스가 없으면 커서는 INSENSITIVE 커서로 생성됩니다.
· SELECT 문에 ORDER BY가 포함되어 있고 ORDER BY 열이 고유한 행 식별자가 아닌 경우 DYNAMIC 커서가 KEYSET 커서로 변환됩니다. KEYSET 커서를 열 수 없으면 INSENSITIVE 커서로 변환됩니다. SQL ANSI-92 구문을 사용하여 정의되었지만 INSENSITIVE 키워드가 없는 커서의 경우에도 마찬가지입니다.
커서 열기
커서를 열면 결과 세트가 생성됩니다. 커서는 DECLARE 문을 통해 정의되지만 실제 실행은 OPEN 문을 통해 이루어집니다. 구문은 다음과 같습니다.
OPEN { { [GLOBAL] 커서_이름 } | 커서_변수_이름}
GLOBAL은 전역 커서를 지정합니다.
Cursor_name은 열린 커서의 이름입니다.
Cursor_variable_name은 참조되는 커서의 변수 이름입니다. 변수는 커서 유형이어야 합니다.
커서가 열린 후 시스템 변수 @@cursor_rows를 사용하여 결과 집합의 행 수를 감지할 수 있습니다. @@cursor_rows가 음수이면 커서가 비동기적으로 마이그레이션된다는 의미이며, 절대값(@@cursor_rows가 -5인 경우 절대값은 5)은 현재 결과 집합의 행 수입니다. 비동기 커서를 사용하면 커서가 완전히 마이그레이션되는 동안에도 사용자는 커서 결과에 계속 액세스할 수 있습니다.
III.커서에서 값을 가져옵니다
커서에서 값을 가져오는 과정에서 결과집중의 각 줄에서 앞뒤로 이동하여 처리할 수 있습니다. 커서가 스크롤 가능하도록 정의된 경우(선언 시 SCROLL 키워드 사용) 결과 집합의 모든 행을 언제든지 검색할 수 있습니다. 비스크롤 커서의 경우 인출 작업은 현재 행 옆의 행에서만 수행할 수 있습니다. 결과 세트는 지역 변수에서 검색할 수 있습니다. Fetch 명령의 구문은 다음과 같습니다.
FETCH [NEXT | FIRST | LAST | RELATIVE {n | @nvar}]
FROM [GLOBAL] 커서_이름 }
[INTO @variable_name ][,...n]]
NEXT는 현재 행의 다음 행에서 값을 가져오도록 지정합니다.
PRIOR는 현재 행의 이전 행에서 값을 가져오도록 지정합니다.
FIRST는 결과 집합의 첫 번째 행입니다.
LAST는 결과 집합의 마지막 행입니다.
ABSOLUTE n은 결과 집합의 n번째 행을 나타냅니다. 행 번호는 지역 변수를 통해 전파될 수도 있습니다. 줄 번호는 0부터 시작하므로 n이 0이면 줄을 가져올 수 없습니다.
RELATIVE n은 가져올 행이 현재 행 앞의 n 행 또는 뒤의 n 행임을 의미합니다. 값이 양수이면 가져올 행은 현재 행보다 n 행 앞에 위치합니다. 값이 음수이면 현재 행 다음의 행이 반환됩니다.
INTO @cursor_variable_name은 커서 컬럼 값이 저장되는 변수 목록을 나타냅니다. 이 목록의 변수 수는 DECLARE 문의 select 문에서 사용하는 변수 수와 동일해야 합니다. 변수의 데이터 유형도 선택한 열의 데이터 유형과 동일해야 합니다. 변수의 값은 다음에 FETCH 문이 사용될 때까지 유지됩니다.
각 FETCH 실행은 시스템 변수 @@fetch_status에 저장됩니다. FETCH가 성공하면 @@fetch_status가 0으로 설정됩니다. -1의 @@fetch_status는 결과 집합의 일부에 도달했음을 나타냅니다(예: 커서가 열린 후 기본 테이블의 행이 삭제됨). @@fetch_status를 사용하여 커서 처리 루프를 구성할 수 있습니다.
예:
DECLARE @iname char(20), @fname char(20)
OPEN Author_cur
author_cur에서 먼저 가져오기 INTO @iname, @fname
WHILE @@fetch_status = 0
BEGIN
IF @fname = 'Albert'
“Albert Ringer를 찾았습니다”
ELSE
“Other Ringer”를 인쇄
author_cur에서 NEXT FROM INTO @iname, @fname

                                                                                                  ~                                                     . 커서가 닫힌 후에는 FETCH 작업을 수행할 수 없습니다. 여전히 FETCH 문을 사용해야 하는 경우 커서를 다시 열어야 합니다. 구문은 다음과 같습니다.
CLOSE [GLOBAL] 커서_이름 | 커서_변수_이름
                      v.                                                          >                                            v. DEALLOCATE 문은 데이터 구조 및 커서에 대한 잠금을 해제합니다. 구문은 다음과 같습니다.
DEALLOCATE [GLOBAL] 커서_이름 | 커서_변수_이름

커서의 전체 예는 다음과 같습니다.
USE master
GO
CREATE PROCEDURE sp_BuildIndexes
AS
DECLARE @TableName sysname, @msg varchar(100), @cmd varchar(100)

DECLARE table_cur CURSOR FOR
SELECT name FROM sysobjects WHERE type='u'

OPEN table_cur
table_cur INTO @TableName
WHILE @@fetch_status = 0
BEGIN
​​​​IF @@fetch_status = -2
                  계속
                        선택 @msg = “ 테이블에 대한 인덱스 작성”+@TableName+”…”
PRINT @msg
SELECT @cmd = “DBCC DBREINDEX ('”+@TableName+”')”
EXEC (@cmd)
PRINT “ “
FETCH NEXT FROM table_cur INTO @TableName
END
DEALLOCATE table_cur
GO
다음 스크립트는 PUBS 데이터베이스 USE pubs
GO
EXEC ap_BuildIndexes에 대해 sp_BuildIndexes
를 실행합니다.
참고: 위의 내용은 사용자 정의 시스템 저장 프로시저를 생성하는 예이기도 합니다.

임시테이블 이용
임시 테이블은 TempDB에서 생성된 테이블입니다. 임시 테이블의 이름은 모두 "#"으로 시작합니다. 임시 테이블의 범위는 임시 테이블을 생성한 연결입니다. 임시 테이블은 두 연결 간에 공유될 수 없으므로 연결이 닫히면 임시 테이블은 삭제됩니다. 저장 프로시저 내에서 임시 테이블이 생성된 경우 임시 테이블의 범위는 저장 프로시저 또는 저장 프로시저에서 호출한 모든 저장 프로시저 내에 있습니다. 연결 간에 임시 테이블을 공유해야 하는 경우 전역 임시 테이블을 사용해야 합니다. 전역 임시 테이블은 "##" 기호로 시작하며 SQL Server를 다시 시작할 때까지 데이터베이스에 존재합니다. 이러한 임시 테이블이 생성되면 모든 사용자가 해당 테이블에 액세스할 수 있습니다. 임시 테이블에는 권한을 명시적으로 지정할 수 없습니다. 임시 테이블은 중간 결과를 저장하는 기능을 제공합니다. 때로는 임시 테이블이 복잡한 쿼리를 두 개의 쿼리로 나누어 성능을 향상시킬 수도 있습니다. 이는 먼저 첫 번째 쿼리의 결과를 임시 테이블에 저장한 다음 두 번째 쿼리에서 임시 테이블을 사용하여 달성할 수 있습니다. 기존 절차 중에 큰 테이블의 하위 집합이 여러 번 사용되는 경우 임시 테이블을 사용하는 것이 좋습니다. 이 경우 후속 조인에 사용하기 위해 데이터의 하위 집합을 임시 테이블에 보관하면 성능이 크게 향상될 수 있습니다. 임시 테이블에도 인덱스를 생성할 수 있습니다.

위 내용은 SQL Server 7.0 시작하기(7) 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Hibernate 프레임워크에서 HQL과 SQL의 차이점은 무엇입니까? Hibernate 프레임워크에서 HQL과 SQL의 차이점은 무엇입니까? Apr 17, 2024 pm 02:57 PM

HQL과 SQL은 Hibernate 프레임워크에서 비교됩니다. HQL(1. 객체 지향 구문, 2. 데이터베이스 독립적 쿼리, 3. 유형 안전성), SQL은 데이터베이스를 직접 운영합니다(1. 데이터베이스 독립적 표준, 2. 복잡한 실행 파일) 쿼리 및 데이터 조작).

Oracle SQL의 나누기 연산 사용법 Oracle SQL의 나누기 연산 사용법 Mar 10, 2024 pm 03:06 PM

"OracleSQL의 나눗셈 연산 사용법" OracleSQL에서 나눗셈 연산은 일반적인 수학 연산 중 하나입니다. 데이터 쿼리 및 처리 중에 나누기 작업은 필드 간의 비율을 계산하거나 특정 값 간의 논리적 관계를 도출하는 데 도움이 될 수 있습니다. 이 문서에서는 OracleSQL의 나누기 작업 사용법을 소개하고 구체적인 코드 예제를 제공합니다. 1. OracleSQL의 두 가지 분할 연산 방식 OracleSQL에서는 두 가지 방식으로 분할 연산을 수행할 수 있습니다.

Oracle과 DB2의 SQL 구문 비교 및 ​​차이점 Oracle과 DB2의 SQL 구문 비교 및 ​​차이점 Mar 11, 2024 pm 12:09 PM

Oracle과 DB2는 일반적으로 사용되는 관계형 데이터베이스 관리 시스템으로, 각각 고유한 SQL 구문과 특성을 가지고 있습니다. 이 기사에서는 Oracle과 DB2의 SQL 구문을 비교 및 ​​차이점을 설명하고 구체적인 코드 예제를 제공합니다. 데이터베이스 연결 Oracle에서는 다음 문을 사용하여 데이터베이스에 연결합니다. CONNECTusername/password@database DB2에서 데이터베이스에 연결하는 문은 다음과 같습니다. CONNECTTOdataba

MyBatis 동적 SQL 태그의 Set 태그 기능에 대한 자세한 설명 MyBatis 동적 SQL 태그의 Set 태그 기능에 대한 자세한 설명 Feb 26, 2024 pm 07:48 PM

MyBatis 동적 SQL 태그 해석: Set 태그 사용법에 대한 자세한 설명 MyBatis는 풍부한 동적 SQL 태그를 제공하고 데이터베이스 작업 명령문을 유연하게 구성할 수 있는 탁월한 지속성 계층 프레임워크입니다. 그 중 Set 태그는 업데이트 작업에서 매우 일반적으로 사용되는 UPDATE 문에서 SET 절을 생성하는 데 사용됩니다. 이 기사에서는 MyBatis에서 Set 태그의 사용법을 자세히 설명하고 특정 코드 예제를 통해 해당 기능을 보여줍니다. Set 태그란 무엇입니까? Set 태그는 MyBati에서 사용됩니다.

SQL의 ID 속성은 무엇을 의미합니까? SQL의 ID 속성은 무엇을 의미합니까? Feb 19, 2024 am 11:24 AM

SQL에서 ID란 무엇입니까? SQL에서 ID는 자동 증가 숫자를 생성하는 데 사용되는 특수 데이터 유형으로, 테이블의 각 데이터 행을 고유하게 식별하는 데 사용됩니다. ID 열은 일반적으로 기본 키 열과 함께 사용되어 각 레코드에 고유한 식별자가 있는지 확인합니다. 이 문서에서는 Identity를 사용하는 방법과 몇 가지 실제 코드 예제를 자세히 설명합니다. Identity를 사용하는 기본 방법은 테이블을 생성할 때 Identit을 사용하는 것입니다.

Java는 MySQL 드라이버 인터셉터를 어떻게 사용하여 SQL 시간이 많이 소요되는 계산을 구현합니까? Java는 MySQL 드라이버 인터셉터를 어떻게 사용하여 SQL 시간이 많이 소요되는 계산을 구현합니까? May 27, 2023 pm 01:10 PM

배경: 회사의 요구 사항 중 하나는 회사의 기존 링크 추적 로그 구성 요소가 MySQL의 SQL 실행 시간 인쇄를 지원해야 한다는 것입니다. 링크 추적을 구현하는 일반적인 방법은 타사 프레임워크 또는 도구에서 제공하는 인터셉터 인터페이스 또는 필터 인터페이스를 구현하는 것입니다. MySQL도 예외는 아닙니다. 사실 MySQL은 MySQL에 의해 구동되는 인터셉터 인터페이스를 구현합니다. MySQL을 구체적으로 구현하는 채널에는 다양한 버전이 있고, 버전마다 인터셉터 인터페이스가 다르기 때문에 사용 중인 MySQL 드라이버의 버전에 따라 응답 인터셉터를 구현해야 합니다. 다음으로 MySQL 채널 5를 소개하겠습니다. 각각 6개 버전 구현. 여기서는 Statem을 구현하기 위한 예로 MySQL 채널 5.1.18 버전을 사용하여 MySQL5를 구현했습니다.

SQL에서 5120 오류를 해결하는 방법 SQL에서 5120 오류를 해결하는 방법 Mar 06, 2024 pm 04:33 PM

해결 방법: 1. 로그인한 사용자에게 데이터베이스에 액세스하거나 운영할 수 있는 충분한 권한이 있는지 확인하고 해당 사용자에게 올바른 권한이 있는지 확인하십시오. 2. SQL Server 서비스 계정에 지정된 파일에 액세스할 수 있는 권한이 있는지 확인하십시오. 3. 지정된 데이터베이스 파일이 다른 프로세스에 의해 열렸거나 잠겼는지 확인하고 파일을 닫거나 해제한 후 쿼리를 다시 실행하십시오. .관리자로 Management Studio를 실행해 보세요.

여러 테이블을 추가하기 위해 SQL 문을 사용하지 않고 Springboot+Mybatis-plus를 구현하는 방법 여러 테이블을 추가하기 위해 SQL 문을 사용하지 않고 Springboot+Mybatis-plus를 구현하는 방법 Jun 02, 2023 am 11:07 AM

Springboot+Mybatis-plus가 다중 테이블 추가 작업을 수행하기 위해 SQL 문을 사용하지 않을 때 내가 직면한 문제는 테스트 환경에서 생각을 시뮬레이션하여 분해됩니다. 매개 변수가 있는 BrandDTO 개체를 생성하여 배경으로 매개 변수 전달을 시뮬레이션합니다. Mybatis-plus에서 다중 테이블 작업을 수행하는 것은 매우 어렵다는 것을 Mybatis-plus-join과 같은 도구를 사용하지 않으면 해당 Mapper.xml 파일을 구성하고 냄새나고 긴 ResultMap만 구성하면 됩니다. 해당 SQL 문을 작성합니다. 이 방법은 번거로워 보이지만 매우 유연하며 다음을 수행할 수 있습니다.

See all articles