pl sql cursor strings
이 튜토리얼에서는 PL SQL 커서가 무엇인지, 암시 적 및 명시 적 커서, 커서 for 루프 등과 같은 관련 개념에 대해 알아 봅니다. 또한 PL / SQL의 문자열 함수에 대해서도 배웁니다.
에서 PL SQL 컬렉션 튜토리얼 PL / SQL 시리즈 , 우리는 코드 예제를 통해 수집 방법, Varray, 중첩 테이블 및 연관 배열에 대해 배웠습니다.
이 기사에서는 PL / SQL에있는 다양한 유형의 커서를 살펴 봅니다. 또한 코드 예제를 통해 다양한 유형의 커서 구현을 살펴볼 것입니다.
또한 PL / SQL에서 사용할 수있는 문자열과 일부 내장 문자열 함수에 대해 설명합니다.
셀레늄 웹 드라이버에 필요한 jar 파일
학습 내용 :
PL SQL 커서
Oracle에는 SQL 문을 실행하기위한 전용 메모리 위치가 있으며 처리 된 정보를 보유합니다. 예를 들면 , 업데이트 된 총 행 수입니다.
PL / SQL의 커서는 이름을 지정하고 컨텍스트 영역이라는 작업 영역에 대한 포인터 역할을 한 다음 해당 정보를 사용합니다. SQL 문에 의해 처리 된 행 수를 유지합니다. 이러한 행을 활성 세트라고합니다. 활성 세트의 크기는 조건을 충족하는 행 수와 같습니다.
아래에 나열된 두 가지 유형의 커서가 있습니다.
- 암시 적 커서
- 명시 적 커서
암시 적 커서
암시 적 커서는 SQL 문을 실행하는 동안 기본적으로 Oracle에 의해 할당됩니다. UPDATE, DELETE 및 INSERT와 같은 DML 작업에 의해 영향을받는 행을 보유합니다. 따라서 명시 적 커서가없는 경우 암시 적 커서가 사용됩니다.
행을 삽입하는 동안 커서는 특정 데이터를 유지합니다. 마찬가지로 삭제 및 업데이트 작업의 경우 영향을받는 행은 커서에 의해 저장됩니다. 암시 적 커서에는 이름이 지정되지 않으므로 개발자가 조작 할 수 없으며 여기에 포함 된 데이터는 어디에서나 사용할 수 없습니다.
최신 업데이트 된 커서는 커서 속성의 도움으로 사용할 수 있습니다. 이러한 속성은 정의를 반복하지 않고 항목의 데이터 유형 및 구조를 참조하는 데 도움이되는 속성입니다. 데이터베이스의 모든 열과 테이블에는 공통 속성 (% 기호로 표시) 특성이 있으며 다음과 같이 사용할 수 있습니다. sql % attribute_name.
Sl 아니. | 이름 | 목적 |
---|---|---|
7 | 길이 (m) | 문자열 m의 문자 수를 반환합니다. |
하나 | %녹이다 | 결과를 부울로 제공합니다. DELETE, INSERT, UPDATE 또는 SELECT 문이 단일 또는 다중 행에 영향을 미치는 경우 true를 반환합니다. 그렇지 않으면 거짓이 반환됩니다. |
두 | % 찾을 수 없음 | 결과를 부울로 제공하고 % FOUND의 역기능을 갖습니다. DELETE, INSERT, UPDATE 또는 SELECT 문이 행에 영향을주지 않으면 true를 반환합니다. 그렇지 않으면 거짓이 반환됩니다. |
삼 | % ISOPEN | 결과를 부울로 제공합니다. 커서가 현재 열려 있으면 true를 반환합니다. 그렇지 않으면 거짓이 반환됩니다. |
4 | % ROWCOUNT | DELETE, INSERT, UPDATE 또는 SELECT 문에서 가져온 행 수를 제공합니다. |
5 | %유형 | 데이터베이스의 열 또는 변수의 데이터 유형을 제공합니다. |
6 | % ROWTYPE | 데이터베이스 행에 해당하는 레코드 유형을 제공합니다. |
TUTOR라는 테이블을 고려해 보겠습니다.
SELECT * FROM TUTOR;
아래에 주어진 SQL 문으로 테이블을 만들었습니다.
CREATE TABLE TUTOR( CODE INT NOT NULL, SUBJECT VARCHAR(15) NOT NULL, TEACHER VARCHAR(15), REVIEWS VARCHAR (10) NOT NULL, PRIMARY KEY (CODE) );
아래에 주어진 SQL 문을 사용하여이 테이블에 값을 삽입했습니다.
INSERT INTO TUTOR (CODE,SUBJECT,TEACHER,REVIEWS) VALUES (1, 'Automation', 'Mukul', 'five stars'); INSERT INTO TUTOR (CODE,SUBJECT,TEACHER,REVIEWS) VALUES (4, 'PLSQL', 'Anand', 'four stars'); INSERT INTO TUTOR (CODE,SUBJECT,TEACHER,REVIEWS) VALUES (2, 'Performance', 'Arvind', 'four stars');
암시 적 커서를 사용한 코드 구현 :
DECLARE total_count number(30); BEGIN --updating a row UPDATE TUTOR SET TEACHER = 'Zen' where CODE = 1; -- result in boolean, true returned if no rows affected IF sql%notfound THEN dbms_output.put_line('no subjects fetched'); -- result in boolean, true returned if any rows affected ELSIF sql%found THEN -- count the number of rows affected rows affected total_count := sql%rowcount; dbms_output.put_line( total_count || ' teacher name updated '); END IF; END; /
위 코드의 출력은 다음과 같아야합니다.
이제 TUTOR라는 테이블에 반영된 변경 사항을 확인하겠습니다.
SQL 문을 사용하여 테이블의 열을 가져옵니다.
SELECT * FROM TUTOR;
따라서 커서가 가리키는대로 코드 = 1 인 교사의 이름이 Zen으로 업데이트되는 것을 볼 수 있습니다.
명시 적 커서
개발자는 DML 작업을 실행하기 위해 고유 한 사용자 정의 컨텍스트 영역을 가질 수 있습니다. 따라서 그들은 그것에 대해 더 많은 힘을 행사할 수 있습니다. PL / SQL 코드 블록의 선언 섹션에는 명시 적 커서가 포함되어 있습니다. 일반적으로 여러 행을 가져 오는 SELECT 작업을 기반으로합니다.
명시 적 커서 구문 :
DECLARE CURSOR <> IS <> <> BEGIN OPEN <>; FETCH <> INTO ; . . CLOSE ; END;
명시 적 커서는 아래 나열된 프로세스에서 작동합니다.
#1) 메모리 초기화를위한 커서 선언. 여기서 커서 이름 역할을하는 명명 된 컨텍스트 영역이 생성됩니다.
통사론:
CURSOR tutorial_s IS SELECT code FROM TUTORIAL;
#두) 메모리 할당을위한 커서 열기 . 이제 데이터베이스에서 업데이트 된 행을 가져 오는 데 커서를 사용할 수 있습니다.
통사론:
OPEN tutorial_s;
# 3) 데이터를 얻기 위해 커서를 가져옵니다. SELECT 작업이 완료된 후 얻은 행은 할당 된 메모리에 저장되고 이제 활성 세트로 간주됩니다. 커서는 한 번에 한 행에 액세스 할 수 있습니다.
통사론:
FETCH tutorial_s INTO c_code;
# 4) 할당 된 메모리를 해제하기 위해 커서가 마침내 닫힙니다. 모든 레코드가 하나씩 획득되므로 커서가 닫히고 컨텍스트 영역 메모리가 해제됩니다.
통사론:
CLOSE tutorial_s;
명시 적 커서를 사용한 코드 구현 :
DECLARE -- cursor declaration CURSOR t_tutorials is SELECT code, subject, teacher FROM Tutor; t_code Tutor.code%type; t_subject Tutor.subject%type; t_teacher Tutor.teacher%type; BEGIN -- opening a cursor OPEN t_tutorials; LOOP -- fetching values from cursor FETCH t_tutorials into t_code, t_subject, t_teacher; EXIT WHEN t_tutorials%notfound; -- printing in console dbms_output.put_line('Code is: ' || t_code || ' ' || 'Subject is: ' || t_subject || ' Teacher is: ' || t_teacher); END LOOP; CLOSE t_tutorials; END; /
위 코드의 출력은 다음과 같아야합니다.
커서 For 루프
명시 적 커서로 작업하는 동안 FETCH, OPEN 및 CLOSE와 같은 명령문을 사용하는 대신 FOR 루프를 사용할 수 있습니다. Cursor FOR Loop에는 데이터베이스에서 얻은 행을 가리키는 레코드로 루프 인덱스가 있습니다. 다음으로 커서를 연 후 결과 집합에서 레코드 필드로 여러 행의 데이터를 반복적으로 가져옵니다.
마지막으로 모든 행을 가져온 후 커서가 닫힙니다. 레코드의 각 필드를 참조하기 위해 점 (.) 기호를 사용합니다. (.) 점 기호는 실제로 구성 요소를 선택하는 데 사용됩니다.
Cursor For 루프의 구문 :
DECLARE CURSOR c IS SELECT code, subject, price FROM Tutorial; ... BEGIN FOR Tutorial_rec IN c LOOP ... price_sum:= price_sum + Tutorial_rec.price; END LOOP;
여기서 Cursor FOR 루프는 ' Tutorial_rec’ 기록으로.
변수 커서
커서 변수는 둘 이상의 행이있는 결과 세트의 현재 행을 참조하는 데 사용됩니다. 모든 유형의 쿼리에 사용할 수 있습니다. PL / SQL의 변수와 비슷합니다. 여기서 값을 할당 할 수 있고 데이터베이스의 하위 프로그램을 통해 전달할 수 있습니다. 따라서 커서 변수는 많은 유연성을 제공하며 중앙 집중식 프로세스에서 데이터를 얻을 수 있습니다.
PL SQL 문자열
PL / SQL의 문자열은 특정 순서의 문자 그룹입니다. 문자열의 크기는 사용 가능하거나 사용 가능하지 않을 수 있습니다. 문자열의 일부가 될 수있는 문자는 특수 문자, 공백, 숫자 및 영숫자 일 수 있습니다. 따라서 문자 그룹에서 선택한 기호 집합입니다.
PL / SQL에는 세 가지 범주의 문자열이 있습니다. 다음은 다음과 같습니다.
- 가변 길이 문자열 : 문자열의 길이는 32,767을 초과 할 수 없으며 문자열에 패딩이있을 수 없습니다.
- 고정 길이 문자열 : 문자열의 길이는 문자열 선언에 언급되어 있습니다. 문자열은 지정된 문자열 길이를 수용하기 위해 공백으로 오른쪽으로 채워집니다.
- CLOB (Character Large Object) : 최대 128TB 크기의 가변 길이 문자열입니다.
PL / SQL의 문자열은 리터럴 또는 변수 일 수 있습니다. 리터럴에는 따옴표가 사용됩니다.
통사론:
'This is Software Testing Help'
또한 문자열 리터럴 내에 따옴표를 추가하는 옵션이 있습니다. 이것은 두 개의 연속적인 작은 따옴표를 유지함으로써 달성됩니다.
통사론:
'We can''t go there'
문자열 리터럴에 대한 사용자 정의 구분 기호에 'q'문자를 접두사로 붙여 설명 할 수 있습니다.
통사론:
q'(We can't go there)'
문자열 변수 선언
PL / SQL에는 NCHAR, CHAR, VARCHAR, VARCHAR2, CLOB 및 NCLOB와 같은 여러 데이터 유형이 있습니다. 국가 별 문자 집합 데이터 유형은 N으로 시작됩니다. 유니 코드 문자를 저장하는 데 사용됩니다.
가변 길이 문자열에서 문자열 길이의 최대 한계를 언급해야합니다.
통사론:
DECLARE subject varchar(10);
즉, 가변 주제는 최대 10 자까지 가능하며 그 이하입니다. 최대 길이가 생략 된 경우 컴파일 오류가 발생합니다.
고정 길이 문자열에서 CHAR 데이터 유형을 사용할 수 있습니다. 고정 길이 문자열의 최대 길이를 정의 할 필요는 없습니다. 제한이 생략되면 Oracle은 기본값 1을 사용합니다.
통사론:
DECLARE subject char := 'P';
길이가 1을 초과하는 CHAR 변수를 선언하면 Oracle은 기본적으로 해당 변수에 저장 한 값을 공백으로 채 웁니다. 이는 지정된 최대 길이에 도달 할 때까지 수행됩니다.
문자 대형 오브젝트에 대한 선언을 작성하기 위해 CLOB가 사용됩니다. 최대 길이는 여기에서 언급 할 필요가 없으며 길이는 Oracle 데이터베이스 자체에 의해 설정되며 데이터베이스 블록의 크기에 따라 다릅니다.
통사론:
DECLARE l CLOB;
PL / SQL에서 데이터 유형을 선택하기위한 지침 :
- 항상 길이가 고정 된 값을 다룰 때 예를 들면 길이와 형식이 일정한 휴대폰 번호는 CHAR 또는 NCHAR 데이터 유형을 사용해야합니다.
- 그렇지 않으면 VARCHAR2 또는 NVARCHAR2 데이터 유형을 사용해야합니다.
- 32,767자를 초과하는 문자열을 처리하는 경우 CLOB 또는 NCLOB 데이터 유형을 사용해야합니다.
문자열을 사용한 코드 구현 :
DECLARE subject varchar2(30); teacher varchar2(40); syllabus clob; options char(1); BEGIN -- Initializing values to variables subject := 'Selenium'; teacher := 'Arun'; syllabus := 'Java, WebDriver Methods, Synchronization, WebTables.'; options := 'S'; -- checking condition and if true IF options = 'S' THEN -- printing in console dbms_output.put_line(subject); dbms_output.put_line(teacher); dbms_output.put_line(syllabus); END IF; END; /
위 코드의 출력은 다음과 같아야합니다.
문자열의 PL / SQL 함수 및 연산자
Sl 아니. | 이름 | 목적 |
---|---|---|
하나 | CONCAT (i, j) | 문자열 i 및 j를 추가하고 새 문자열을 반환합니다. |
두 | ASCII (n) | n에 해당하는 ASCII 값을 반환합니다. |
삼 | CHR (n) | n의 해당 ASCII 값과 함께 문자를 반환합니다. |
4 | INSTR (i, x, 시작, n) | x 문자열에서 부분 문자열 i를 찾은 다음 발생 위치를 반환합니다. 시작은 검색의 시작 위치를 나타내며 선택적 매개 변수입니다. n은 문자열의 n 번째 발생이며 선택적 매개 변수이기도합니다. |
5 | INSTRB (i) | 문자열에서 하위 문자열의 위치를 바이트 단위로 반환합니다. |
6 | INITCAP (k) | 문자열 k에있는 개별 단어의 초기 문자를 대문자로 변환 한 다음 문자열을 반환합니다. |
8 | LENGTHB (n) | 단일 바이트 문자 집합에 대해 문자열 m의 문자 수를 바이트 단위로 반환합니다. |
9 | LTRIM (n, x) | 문자열 n의 왼쪽에서 x 문자를 제거합니다. x는 제공되지 않는 경우 선택적 매개 변수이며 문자열 n의 모든 선행 공백을 제거합니다. |
10 | RTRIM (n, x) | 문자열 n의 오른쪽에서 x 문자를 제거합니다. x는 제공되지 않은 경우 선택적 매개 변수이며 문자열 n의 모든 후행 공백을 제거합니다. |
열한 | TRIM ((trim_char FROM) x); | 문자열 x의 시작, 끝 또는 양쪽 끝에서 공백이나 언급 된 문자를 제거합니다. |
12 | 아래 (i) | 문자열 i의 문자를 소문자로 변환 한 다음 문자열을 반환합니다. |
13 | 위 (i) | 문자열 i의 문자를 대문자로 변환 한 다음 문자열을 반환합니다. |
14 | LPAD (i, l, x) | 문자열 x를 왼쪽으로 채워 문자열 i 길이를 l로 만듭니다. 생략 된 공백이 문자열 i의 왼쪽에 채워지면 매개 변수 x는 선택 사항입니다. |
열 다섯 | RPAD (i, l, x) | 문자열 x를 오른쪽으로 채워 문자열 i 길이를 l로 만듭니다. 생략 된 공백이 문자열 i의 오른쪽에 채워지면 매개 변수 x는 선택 사항입니다. |
16 | NANVL (n, val) | n이 NaN 값과 같으면 val을 반환하고, 그렇지 않으면 n을 반환합니다. |
17 | NLSSORT (i) | 문자 정렬 방법을 수정합니다. NLS 기능 이전에 언급되어야합니다. 그렇지 않으면 기본 정렬이 수행됩니다. |
18 | NLS_INITCAP (i) | 기능은 INITCAP 함수와 비슷하지만 NLSSORT 함수에서 언급 한 다른 기술을 사용할 수 있습니다. |
19 | NLS_LOWER (m) | 기능은 LOWER 함수와 비슷하지만 NLSSORT 함수에서 언급 한 다른 기술을 사용할 수 있습니다. |
스물 | NLS_UPPER (m) | 기능은 UPPER 함수와 비슷하지만 IN 함수 NLSSORT에서 언급 한 것과 다른 종류의 기술을 사용할 수 있습니다. |
이십 일 | NVL (n, val) | x가 NULL 값과 같으면 val을 반환하고, 그렇지 않으면 n을 반환합니다. |
22 | NVL2 (n, val, val2) | x가 NULL 값과 같지 않으면 val을 반환하고, x가 NULL과 같으면 val2를 반환합니다. |
2. 3 | SOUNDEX (i) | i의 음성 표현을 가진 문자열을 반환합니다. |
24 | SUBSTR (n, 시작, l) | start에 언급 된 위치에서 시작하는 문자열 n의 하위 문자열을 반환합니다. 매개 변수 l은 선택 사항이며 하위 문자열의 길이를 나타냅니다. |
25 | SUBSTRB (n) | 함수 SUBSTR과 기능이 비슷하지만 매개 변수는 단일 바이트 문자 시스템의 문자가 아니라 바이트 단위입니다. |
26 | REPLACE (n, s, r) | s의 발생을 문자열 n에서 문자열 r로 대체합니다. |
일부 문자열 함수를 사용한 코드 구현 :
DECLARE name varchar2(30) := ' software testing help!'; BEGIN dbms_output.put_line(UPPER(name)); dbms_output.put_line(LOWER(name)); dbms_output.put_line(LENGTH(name)); dbms_output.put_line(INITCAP(name)); /* get the first word in the string */ dbms_output.put_line ( SUBSTR (name, 1, 8)); /* get the location of the first 'w' */ dbms_output.put_line ( INSTR (name, 'w')); /* replace a string */ dbms_output.put_line ( REPLACE( name, 'help', 'solution')); /* trim a string from right */ dbms_output.put_line ( RTRIM(name,'!')); /* trim a string */ dbms_output.put_line ( TRIM(name)); END; /
위 코드의 출력은 다음과 같아야합니다.
네트워크 보안 키는 어디에 있습니까
위 코드에 대한 설명 :
- 첫 번째 출력은 소프트웨어 테스트 도움말!. 입력 문자열을 반환합니다. '소프트웨어 테스트 도움!' 의 도움으로 대문자로 UPPER 기능.
- 두 번째 출력은 소프트웨어 테스트 도움!. 입력 문자열을 반환합니다. 소프트웨어 테스트 도움말! 의 도움으로 소문자로 LOWER 함수.
- 세 번째 출력 2. 3 . 다음을 사용하여 입력 문자열의 길이를 반환합니다. LENGTH 함수.
- 네 번째 출력은 소프트웨어 테스팅 도움말!. 입력 문자열의 각 단어의 첫 번째 문자를 대문자로 반환합니다. INITCAP 함수 .
- 다섯 번째 출력은 소프트 워. 첫 번째 위치에서 길이 8까지 입력 문자열의 하위 문자열을 반환합니다. SUBSTR 함수 .
- 여섯 번째 출력은 6. 위치를 반환합니다 에 의 도움으로 입력 문자열에 INSTR 함수 .
- 일곱 번째 출력은 소프트웨어 테스트 솔루션!. 대체하여 새 문자열을 반환합니다. 도움 와 해결책 REPLACE의 도움으로 입력 문자열에서 함수 .
- 여덟 번째 출력은 소프트웨어 테스트 도움. 문자를 트리밍하여 새 문자열을 반환합니다. ! 의 도움으로 입력 문자열의 오른쪽에서 RTRIM 기능 .
- 아홉 번째 출력은 소프트웨어 테스트 도움!. 다음을 사용하여 입력 문자열에서 선행 및 후행 공백을 트리밍하여 새 문자열을 반환합니다. TRIM 기능 .
자주 묻는 질문과 답변
Q # 1) PL / SQL에서 커서 란 무엇입니까?
대답: SQL 문이 실행 된 후 Oracle 데이터베이스는 컨텍스트 영역이라는 메모리를 구축합니다. 커서에는 select 문에서 처리 된 정보가 있으며 해당 SELECT 작업에 의해 업데이트 된 행이 포함됩니다.
Q # 2) 커서 란 무엇이며 커서의 종류는 무엇입니까?
대답: SQL 문이 실행 된 후 Oracle 데이터베이스는 임시 작업 영역 인 컨텍스트 영역이라는 메모리를 구축합니다. 커서에는 암시 적 커서와 명시 적 커서의 두 가지 범주가 있습니다.
Q # 3) Oracle에서 커서를 어떻게 실행합니까?
대답: Oracle에서 커서를 실행하기위한 구문은 다음과 같습니다. 열다<> . CURSORNAME은 PL / SQL 코드 블록의 선언 섹션에서 사용할 수있는 커서의 이름을 나타냅니다.
Q # 4) begin 안에 커서를 선언 할 수 있습니까?
대답: 예, PL / SQL 코드 블록 내에서 둘 이상의 커서를 선언 할 수 있습니다.
Q # 5) PL / SQL에서 문자열의 길이를 어떻게 찾습니까?
대답: LENGTH (str) 함수를 사용하여 PL / SQL에서 문자열의 길이를 찾을 수 있습니다. 여기서 str은 길이를 구하려는 문자열입니다. 이 함수는 숫자 값을 반환합니다.
Q # 6) Oracle에서 SUBSTR은 무엇입니까?
대답: SUBSTR 함수는 문자열의 특정 위치에서 특정 수의 문자를 제공합니다. 구문은 SUBSTR (n, start, l)입니다. start에 언급 된 위치에서 시작하는 문자열 n에서 하위 문자열을 반환합니다. 매개 변수 l은 선택 사항이며 하위 문자열의 길이를 나타냅니다.
결론
이 튜토리얼에서는 PL / SQL의 몇 가지 기본 개념에 대해 자세히 설명했습니다.
아래에 나열된 다음 주제를 다루었습니다.
- PL SQL 커서 : 암시 적 커서 및 명시 적 커서
- PL / SQL 문자열.
- 문자열의 함수 및 연산자.
<< PREV Tutorial | 다음 튜토리얼 >>