pl sql cursor strings
В този урок ще научим какво е PL SQL курсор и свързани понятия като Implicit и Explicit Cursors, курсор за цикъл и др. Ще научим и за String функции в PL / SQL:
В PL SQL колекции урок на PL / SQL серия , научихме за Методите за събиране, Вариант, Вложена таблица и Асоциативен масив с помощта на примери за код.
В тази статия ще изследваме различните видове курсори, които PL / SQL има. Ще видим и изпълнението на различни видове курсори с примери за кодове.
Също така ще обсъдим низовете и някои от вградените функции на низове, налични в PL / SQL.
load runner инструмент за тестване на производителността
Какво ще научите:
PL SQL курсор
Oracle има специални местоположения в паметта за изпълнение на SQL изрази и след това държи тази обработена информация, например , общият брой актуализирани редове.
Курсорът в PL / SQL дава име и действа като указател към работната област, наречена контекстна област и след това използва нейната информация. Той поддържа броя на редовете, обработени от SQL израза. Тези редове се извикват като активен набор. Размерът на активния набор е равен на броя на редовете, които отговарят на условието.
Има два вида курсори, които са изброени по-долу:
- Имплицитен курсор
- Изричен курсор
Неявни курсори
Имплицитните курсори се разпределят от Oracle по подразбиране, докато изпълняват SQL изрази. Той съдържа засегнатите редове от DML операции като UPDATE, DELETE и INSERT. По този начин имплицитни курсори се използват, когато нямаме изричен курсор на място.
Докато вмъкваме ред, курсорът съхранява конкретните данни. По същия начин, за операции по изтриване и актуализиране, засегнатите редове се съхраняват от курсорите. Имплицитните курсори не получават никакви имена и следователно не могат да бъдат манипулирани от разработчиците и данните, съдържащи се в него, не могат да бъдат използвани никъде.
Последните актуализирани курсори могат да се използват с помощта на атрибути на курсора. Тези атрибути са свойствата, които помагат да се препрати към типа данни и структурата на елементите, без да се повтарят техните дефиниции. Всички колони и таблици в база данни имат общи характеристики на атрибута (представени чрез знак%) и могат да се използват като sql% атрибут_име.
Sl No. | Име | Цели |
---|---|---|
7 | ДЪЛЖИНА (м) | Връща броя на знаците в низ m. |
1 | % НАМЕРЕН | Дава резултата в булева стойност. Връща вярно, ако изразите DELETE, INSERT, UPDATE или SELECT засягат единични или множество редове. В противен случай се връща false. |
две | % НЕ НАМЕРЕН | Дава резултата в булева стойност и има обратна функционалност на% FOUND. Връща вярно, ако изразите 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. Cursor 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. Те са изброени по-долу:
- Низ с променлива дължина: Дължината на низа не може да надвишава 32 767 и не може да има подложка на низа.
- Низ с фиксирана дължина : Дължината на низа се споменава в декларацията на низа. Низът е подплатен вдясно с интервали, за да побере определената дължина на низа.
- Големи символни обекти (CLOB): Това е низ с променлива дължина, който има размер до 128 TB.
Низовете в 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. | Име | Цели |
---|---|---|
1 | CONCAT (i, j) | Добавя низовете i и j и връща новия низ. |
две | ASCII (n) | Връща еквивалентната ASCII стойност на n. |
3 | CHR (n) | Връща символа заедно с еквивалентната ASCII стойност на n. |
4 | INSTR (i, x, старт, n) | Намира подниза i в x низ и след това връща позицията на възникване. Началото се отнася до началната позиция на търсене и е незадължителен параметър. N е n-тото появяване на низа и също е незадължителен параметър. |
5 | INSTRB (i) | Връща позицията на подниз в низ в байтове. |
6 | INITCAP (k) | Преобразува първоначалния знак на отделни думи в низ k в главни букви и след това връща низа. |
8 | ДЪЛЖИНА (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 (m) | Подобна по функционалност като функция LOWER, но може да отнеме различен вид техника, както е споменато във функция NLSSORT. |
двайсет | NLS_UPPER (m) | Подобна по функционалност като функция UPPER, но може да отнеме различен вид техника, както е споменато IN функция 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 | SUBSTRB (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; /
Резултатът от горния код трябва да бъде:
най-добрият безплатен софтуер за оптимизация за Windows 10
Обяснение на горния код:
- Първият изход е ПОМОЩ ЗА ИЗПИТВАНЕ НА СОФТУЕРА !. Връща входния низ ‘Помощ за тестване на софтуер!’ в горния регистър с помощта на ГОРНА функция.
- Вторият изход е помощ за тестване на софтуер !. Връща входния низ ПОМОЩ ЗА ИЗПИТВАНЕ НА СОФТУЕРА! с малки букви с помощта на функцията LOWER.
- Третият изход 2. 3 . Връща дължината на входния низ с помощта на Функция LENGTH.
- Четвъртият изход е Помощ за тестване на софтуер! Връща първия символ на всяка дума от входния низ в главни букви с помощта на Функция INITCAP .
- Петият изход е softwar. Връща подниз от входния низ от първата позиция на дължина 8, включително интервал с помощта на Функция SUBSTR .
- Шестият изход е 6. Връща позицията на в във входния низ с помощта на Функция INSTR .
- Седмият изход е решение за тестване на софтуер !. Връща нов низ чрез замяна помогне с решение във входния низ с помощта на REPLACE функция .
- Осмият изход е помощ за тестване на софтуер. Връща нов низ чрез изрязване на символа ! отдясно на входния низ с помощта на Функция RTRIM .
- Деветият изход е помощ за тестване на софтуер !. Връща нов низ чрез изрязване на водещите и последващите интервали от входния низ с помощта на TRIM функция .
Често задавани въпроси и отговори
В # 1) Какво представлява курсорът в PL / SQL?
Отговор: След изпълнение на SQL оператор, базата данни на Oracle изгражда памет, наречена контекстна област. Курсорът има информацията, обработена от оператор select, и съдържа редовете, актуализирани от тази операция SELECT.
В # 2) Какво представлява курсорът и видът на курсора?
Отговор: След изпълнение на SQL оператор, базата данни на Oracle изгражда памет, наречена контекстна област, която е временна работна област. Има две категории курсори - имплицитен курсор и явен курсор.
В # 3) Как да стартирам курсор в Oracle?
Отговор: За да стартирате курсор в Oracle, синтаксисът е: ОТВОРЕНИ<> . CURSORNAME се отнася до името на курсора, налично в раздела за декларация на PL / SQL блока на кода.
В # 4) Можем ли да декларираме, че курсорът вътре започва?
Отговор: Да, можем да декларираме повече от един курсор в PL / SQL блок с код.
В # 5) Как намирате дължината на низ в PL / SQL?
Отговор: Можем да намерим дължината на низ в PL / SQL с помощта на функция LENGTH (str). Тук str е низът, за който искаме да получим дължината. Тази функция връща числова стойност.
В # 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 Урок за създаване на изглед с примери за кодове