pl sql cursor strings
У цьому підручнику ми дізнаємося, що таке PL SQL курсор та пов'язані з ним поняття, такі як неявні та явні курсори, курсор для циклу тощо. Ми також дізнаємося про рядкові функції в PL / SQL:
В PL SQL колекції підручник з PL / SQL серія , ми дізналися про методи збору, Varray, вкладену таблицю та асоціативний масив за допомогою прикладів коду.
У цій статті ми розглянемо різні типи курсорів, якими володіє PL / SQL. Ми також побачимо реалізацію різних типів курсорів із прикладами коду.
Крім того, ми обговоримо рядки та деякі вбудовані функції рядків, доступні в PL / SQL.
Приклад хеш-таблиці c ++
Що ви дізнаєтесь:
PL Курсор SQL
Oracle виділив місця пам'яті для виконання операторів SQL, а потім зберігає оброблену інформацію, наприклад , загальна кількість рядків оновлено.
Курсор у PL / SQL дає ім'я та діє як вказівник на область роботи, що називається контекстною областю, а потім використовує її інформацію. Він зберігає кількість рядків, оброблених оператором SQL. Ці рядки називаються активним набором. Розмір активного набору дорівнює кількості рядків, які відповідають умові.
Існує два типи курсорів, які перелічені нижче:
- Неявний курсор
- Явний курсор
Неявні курсори
Явні курсори виділяються Oracle за замовчуванням під час виконання операторів SQL. У ньому містяться зазначені рядки в DML-операціях, таких як UPDATE, DELETE та INSERT. Таким чином, неявні курсори використовуються, коли у нас немає явного курсору на місці.
Поки ми вставляємо рядок, курсор зберігає ці дані. Подібним чином, для операцій видалення та оновлення, зазначені рядки зберігаються курсорами. Імпліцитні курсори не отримують жодних імен, отже розробники не можуть ними маніпулювати, а дані, що містяться на ньому, не можна використовувати де-небудь.
Останні оновлені курсори можна використовувати за допомогою атрибутів курсору. Ці атрибути є властивостями, які допомагають посилатися на тип даних та структуру елементів без повторення їх визначень. Усі стовпці та таблиці в базі даних мають загальні характеристики атрибуту (представлені знаком%), і їх можна використовувати як sql% атрибут_ім'я.
Sl No | Ім'я | Призначення |
---|---|---|
7 | Довжина (м) | Повертає кількість символів у рядку m. |
один | % ЗНАЙДЕНО | Дає результат у логічній формі. Повертає true, якщо оператори DELETE, INSERT, UPDATE або SELECT впливають на один або кілька рядків. Або повертається false. |
два | %НЕ ЗНАЙДЕНО | Дає результат у логічній формі та має зворотну функціональність% FOUND. Повертає true, якщо оператори DELETE, INSERT, UPDATE або SELECT не впливають на жоден рядок. Або повертається false. |
3 | % ІЗОПЕН | Дає результат у логічній формі. Повертає true, якщо курсор наразі відкритий. Або повертається false. |
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 Loop має індекс циклу як запис, який вказує на рядок, отриманий з бази даних. Далі після відкриття курсору він неодноразово отримує кілька рядків даних із набору результатів у поля запису.
Нарешті, курсор закривається після отримання всіх рядків. Для позначення кожного поля в записі ми використовуємо крапку (.). (.) крапковий знак фактично використовується для вибору компонента.
Синтаксис циклу курсору 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 є три категорії рядків. Вони перелічені нижче:
- Рядок змінної довжини: Довжина рядка не може перевищувати 32767, і не може бути відступів до рядка.
- Рядок із фіксованою довжиною : Довжина рядка згадується в оголошенні рядка. Рядок заповнений пробілами праворуч для розміщення заданої довжини рядка.
- Великі об'єкти символів (CLOB): Це рядок змінної довжини, який має розмір до 128 ТБ.
Рядки в 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. Вони використовуються для зберігання символів Unicode.
У рядку змінної довжини слід вказати максимальну межу довжини рядка.
Синтаксис:
DECLARE subject varchar(10);
Це означає, що змінна тема може містити до 10 символів і не більше цього. У випадку, коли максимальна довжина опущена, виникає помилка компіляції.
У рядку з фіксованою довжиною можна використовувати тип даних CHAR. Не потрібно визначати максимальну довжину рядка з фіксованою довжиною. Якщо обмеження опущено, Oracle приймає значення за замовчуванням 1.
Синтаксис:
DECLARE subject char := 'P';
Якщо ви оголосите змінну CHAR із довжиною, що перевищує 1, 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 No | Ім'я | Призначення |
---|---|---|
один | КОНКАТ (i, j) | Додає рядки i та j і повертає новий рядок. |
два | ASCII (n) | Повертає еквівалентне значення ASCII n. |
3 | CHR (n) | Повертає символ разом із еквівалентним значенням ASCII n. |
4 | INSTR (i, x, start, n) | Знаходить підрядок i у x рядку, а потім повертає позицію входження. Початок відноситься до початкової позиції пошуку і є необов’язковим параметром. N - це n-те входження рядка, а також є необов’язковим параметром. |
5 | INSTRB (i) | Повертає позицію підрядка в рядку в байтах. |
6 | INITCAP (k) | Перетворює початковий символ окремих слів у рядку k у верхній регістр, а потім повертає рядок. |
8 | LENGTHB (n) | Повертає кількість символів у рядку m у байтах для однобайтового набору символів. |
9 | LTRIM (n, x) | Видаляє x символів зліва від рядка n. Значення x є необов'язковим параметром, якщо не вказано, видаляє всі пробіли рядка n. |
10 | RTRIM (n, x) | Видаляє x символів праворуч від рядка n. Значення x є необов'язковим параметром, якщо не надано, видаляє всі кінцеві пробіли рядка n. |
одинадцять | TRIM ((trim_char FROM) x); | Видаляє пробіли або згадані символи з початку, кінця або обох кінців рядка x. |
12 | НИЖЧЕ (i) | Перетворює символи рядка i у малі регістри, а потім повертає рядок. |
13 | ВЕРХНІЙ (i) | Перетворює символи рядка i у великі регістри, а потім повертає рядок. |
14 | LPAD (i, l, x) | Прокладіть рядок x ліворуч, щоб зробити рядок i довжиною l. Параметр x необов’язковий, якщо пропущені пробіли заповнені ліворуч від рядка i. |
п’ятнадцять | RPAD (i, l, x) | Розміщує рядок x праворуч, щоб довжина рядка i сягнула l. Параметр x необов’язковий, якщо пропущені пробіли заповнені праворуч від рядка i. |
16 | NANVL (n, val) | Повертає val, якщо n дорівнює значенню NaN, інакше n повертається. |
17 | NLSSORT (i) | Змінює метод сортування символів. Це слід згадати перед будь-якою функцією NLS, інакше буде здійснено сортування за замовчуванням. |
18 | NLS_INITCAP (i) | Подібний за функціональністю, як функція INITCAP, але він може приймати різні методи, як зазначено у функції NLSSORT. |
19 | NLS_LOWER (м) | Подібний за функціональністю, як функція LOWER, але він може приймати різні методи, як зазначено у функції NLSSORT. |
двадцять | NLS_UPPER (м) | Подібний за функціональністю, як функція UPPER, але він може приймати інший тип техніки, як згадано у функції NLSSORT. |
двадцять один | NVL (n, val) | Повертає val, якщо x дорівнює NULL значенню, інакше n повертається. |
22 | NVL2 (n, val, val2) | Повертає val, якщо x не дорівнює значенню NULL, інакше якщо x дорівнює NULL, повертається val2. |
2. 3 | SOUNDEX (i) | Повертає рядок із голосовим поданням i. |
24 | SUBSTR (n, старт, l) | Повертає підрядок рядка n, який починається з позиції, згаданої в start. Параметр l необов’язковий і представляє довжину підрядка. |
25 | ПІДСТАВКА (n) | Подібний за функціональністю, як функція SUBSTR, але параметри знаходяться в байтах, а не в символах для однобайтової системи символів. |
26 | ЗАМІНИ (n, s, r) | Замінює випадки s на рядок r з у рядку n. |
Реалізація коду з деякими рядковими функціями:
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; /
Результатом роботи вищезазначеного коду має бути:
найкращий завантажувач mp3 для андроїд телефону
Пояснення наведеного вище коду:
- Перший результат - ТЕСТУВАННЯ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ! Повертає вхідний рядок 'Допомога у тестуванні програмного забезпечення!' у верхньому регістрі за допомогою ВЕРХНЯ функція.
- Другий результат - Довідка з тестування програмного забезпечення !. Повертає вхідний рядок ДОПОМОГА ТЕСТУВАННЯ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ! в нижньому регістрі за допомогою функція LOWER.
- Третій вихід 2. 3 . Повертає довжину вхідного рядка за допомогою Функція LENGTH.
- Четвертий результат - Довідка щодо тестування програмного забезпечення !. Повертає перший символ кожного слова вхідного рядка у верхньому регістрі за допомогою Функція INITCAP .
- П'ятий результат - softwar. Повертає підрядок вхідного рядка з першої позиції до довжини 8, включаючи пробіл за допомогою Функція SUBSTR .
- Шостий результат - 6. Повертає позицію в у вхідному рядку за допомогою Функція INSTR .
- Сьомий результат - рішення для тестування програмного забезпечення !. Повертає новий рядок, замінюючи допомогти з рішення у вхідному рядку за допомогою REPLACE функція .
- Восьмий результат - Довідка з тестування програмного забезпечення. Повертає новий рядок обрізанням символу ! праворуч від вхідного рядка за допомогою Функція RTRIM .
- Дев'ятий результат - Довідка з тестування програмного забезпечення !. Повертає новий рядок, обрізаючи провідні та кінцеві пробіли з вхідного рядка за допомогою Функція TRIM .
Часті запитання та відповіді
Q # 1) Що таке курсор у PL / SQL?
Відповідь: Після виконання оператора SQL база даних Oracle створює пам'ять, що називається контекстною областю. Курсор має інформацію, оброблену з оператора select, і містить рядки, оновлені цією операцією SELECT.
Q # 2) Що таке курсор і тип курсору?
Відповідь: Після виконання оператора SQL база даних Oracle створює пам'ять, яку називають контекстною областю, яка є тимчасовою робочою областю. Існує дві категорії курсорів - неявний курсор та явний курсор.
Запитання №3) Як запустити курсор в Oracle?
Відповідь: Щоб запустити курсор в Oracle, синтаксис: ВІДЧИНЕНО<> . CURSORNAME посилається на ім'я курсору, доступне в розділі декларації блоку коду PL / SQL.
Q # 4) Чи можемо ми оголосити курсор всередині почати?
Відповідь: Так, ми можемо оголосити більше одного курсора в блоці коду PL / SQL.
Q # 5) Як знайти довжину рядка в PL / SQL?
Відповідь: Ми можемо знайти довжину рядка в PL / SQL за допомогою функції LENGTH (str). Тут str - це рядок, для якого ми хочемо отримати довжину. Ця функція повертає числове значення.
Q # 6) Що таке SUBSTR в Oracle?
Відповідь: Функція SUBSTR дає певну кількість символів з певного положення рядка. Синтаксис SUBSTR (n, start, l). Він повертає підрядок із рядка n, який починається з позиції, згаданої в start. Параметр l необов’язковий і представляє довжину підрядка.
Висновок
У цьому посібнику ми детально обговорили деякі основні поняття PL / SQL.
Ми розглянули наступні теми, перелічені нижче:
- PL SQL Курсор: неявний курсор та явний курсор
- Рядки PL / SQL.
- Функції та оператори у рядку.
<< PREV Tutorial | НАСТУПНИЙ підручник >>
Рекомендована література
- PL SQL Підручник для початківців з прикладами Що таке PL / SQL
- Підручник з довжини масиву Java із прикладами коду
- Підручник з обробки винятків C # із прикладами коду
- Ключове слово Java 'this': Підручник із прикладами коду
- Підручник з Python DateTime із прикладами
- Використання курсору в MongoDB з прикладами
- Підручник з функцій / методів C # із прикладами коду
- Підручник із створення перегляду MySQL із прикладами коду