pl sql cursor strings
W tym samouczku dowiemy się, czym jest kursor języka PL SQL i powiązane pojęcia, takie jak kursory niejawne i jawne, kursor dla pętli itp. Dowiemy się również o funkcjach ciągów znaków w PL / SQL:
w Kolekcje PL SQL samouczek Seria PL / SQL , dowiedzieliśmy się o metodach zbierania danych, zmiennej zmiennej, tabeli zagnieżdżonej i tablicy asocjacyjnej z pomocą przykładów kodu.
W tym artykule przyjrzymy się różnym typom kursorów dostępnych w PL / SQL. Zobaczymy również implementację różnych typów kursorów z przykładami kodu.
Omówimy również ciągi znaków i niektóre wbudowane funkcje ciągów dostępne w PL / SQL.
sql pytania i odpowiedzi dla doświadczonych
Czego się nauczysz:
PL SQL Kursor
Oracle ma dedykowane lokalizacje pamięci do wykonywania instrukcji SQL, a następnie przechowuje przetworzone informacje, na przykład , łączna liczba zaktualizowanych wierszy.
Kursor w PL / SQL nadaje nazwę i działa jako wskaźnik do obszaru pracy zwanego obszarem kontekstu, a następnie wykorzystuje zawarte w nim informacje. Zachowuje liczbę wierszy przetwarzanych przez instrukcję SQL. Te wiersze nazywane są aktywnym zestawem. Rozmiar aktywnego zestawu jest równy liczbie wierszy spełniających warunek.
Istnieją dwa typy kursorów, które są wymienione poniżej:
- Niejawny kursor
- Jawny kursor
Niejawne kursory
Niejawne kursory są domyślnie przydzielane przez Oracle podczas wykonywania instrukcji SQL. Przechowuje wiersze, na które ma wpływ operacje DML, takie jak UPDATE, DELETE i INSERT. Dlatego niejawne kursory są używane, gdy nie mamy wyraźnego kursora na miejscu.
Podczas wstawiania wiersza kursor zachowuje te konkretne dane. Podobnie w przypadku operacji usuwania i aktualizowania wiersze, których to dotyczy, są przechowywane przez kursory. Ukryte kursory nie mają żadnych nazw, dlatego deweloperzy nie mogą nimi manipulować, a dane na nich zawarte nie mogą być nigdzie używane.
Najnowsze zaktualizowane kursory mogą być używane z pomocą atrybutów kursora. Te atrybuty to właściwości, które pomagają odwoływać się do typu danych i struktury pozycji bez powtarzania ich definicji. Wszystkie kolumny i tabele w bazie danych mają wspólne cechy atrybutów (reprezentowane przez znak%) i mogą być używane jako sql% nazwa_atrybutu.
Sl No. | Nazwa | Cele |
---|---|---|
7 | DŁUGOŚĆ (m) | Zwraca liczbę znaków w ciągu m. |
1 | %ZNALEZIONY | Podaje wynik w postaci logicznej. Zwraca wartość true, jeśli instrukcje DELETE, INSERT, UPDATE lub SELECT mają wpływ na jeden lub wiele wierszy. W przeciwnym razie zwracana jest wartość false. |
dwa | %NIE ZNALEZIONO | Daje wynik jako wartość logiczną i ma odwrotną funkcjonalność% FOUND. Zwraca wartość true, jeśli instrukcje DELETE, INSERT, UPDATE lub SELECT nie mają wpływu na żadne wiersze. W przeciwnym razie zwracana jest wartość false. |
3 | %JEST OTWARTE | Podaje wynik w postaci logicznej. Zwraca wartość true, jeśli kursor jest obecnie otwarty. W przeciwnym razie zwracana jest wartość false. |
4 | %LICZBA WIERSZY | Podaje liczbę wierszy pobranych z instrukcji DELETE, INSERT, UPDATE lub SELECT. |
5 | %RODZAJ | Podaje typ danych kolumny lub zmiennej bazy danych. |
6 | % ROWTYPE | Podaje typ rekordu odpowiadający wierszowi bazy danych. |
Rozważmy tabelę o nazwie TUTOR.
SELECT * FROM TUTOR;
Stworzyliśmy tabelę z poniższą instrukcją SQL:
CREATE TABLE TUTOR( CODE INT NOT NULL, SUBJECT VARCHAR(15) NOT NULL, TEACHER VARCHAR(15), REVIEWS VARCHAR (10) NOT NULL, PRIMARY KEY (CODE) );
Wstawiono wartości do tej tabeli z instrukcjami SQL podanymi poniżej:
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');
Implementacja kodu z niejawnym kursorem:
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; /
Wynik powyższego kodu powinien wyglądać następująco:
Zweryfikujmy teraz zmiany odzwierciedlone w tabeli o nazwie TUTOR.
Używamy instrukcji SQL, aby pobrać kolumny tabeli:
SELECT * FROM TUTOR;
Widzimy więc, jak wskazuje kursor, nazwisko nauczyciela z kodem = 1 zostaje zaktualizowane do Zen.
Jawne kursory
Deweloperzy mogą mieć swój własny obszar kontekstu zdefiniowany przez użytkownika do wykonywania operacji DML. W ten sposób mogą sprawować nad nim większą władzę. Sekcja deklaracji bloku PL / SQL zawiera wyraźne kursory. Zwykle jest zbudowany na operacjach SELECT, które pobierają wiele wierszy.
Składnia jawnego kursora:
DECLARE CURSOR <> IS <> <> BEGIN OPEN <>; FETCH <> INTO ; . . CLOSE ; END;
Explicit Cursor działa na poniższych procesach:
# 1) Deklaracja kursora do inicjalizacji pamięci. Tutaj tworzony jest nazwany obszar kontekstu, który służy jako nazwa kursora.
Składnia:
CURSOR tutorial_s IS SELECT code FROM TUTORIAL;
#dwa) Otwarcie kursora w celu przydzielenia pamięci . Kursor jest teraz dostępny do pobierania zaktualizowanych wierszy z bazy danych.
Składnia:
OPEN tutorial_s;
# 3) W celu pobrania danych pobierany jest kursor. Po wykonaniu operacji SELECT uzyskane wiersze są umieszczane w przydzielonej pamięci i są teraz traktowane jako zestawy aktywne. Kursor ma dostęp do jednego wiersza na raz.
Składnia:
FETCH tutorial_s INTO c_code;
# 4) Kursor zostaje ostatecznie zamknięty, aby zwolnić przydzieloną pamięć. Ponieważ wszystkie rekordy są pobierane jeden po drugim, kursor jest zamykany, aby zwolnić pamięć obszaru kontekstu.
Składnia:
CLOSE tutorial_s;
Implementacja kodu z jawnym kursorem:
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; /
Wynik powyższego kodu powinien wyglądać następująco:
Kursor dla pętli
Podczas pracy z jawnymi kursorami możemy użyć pętli FOR zamiast instrukcji takich jak FETCH, OPEN i CLOSE. Kursor FOR Pętla ma indeks pętli jako rekord, który wskazuje na wiersz uzyskany z bazy danych. Następnie po otwarciu kursora wielokrotnie pobiera wiele wierszy danych z zestawu wyników do pól rekordów.
Na koniec kursor jest zamykany po uzyskaniu wszystkich wierszy. Używamy znaku kropki (.), Aby odnieść się do każdego pola w rekordzie. (.) znak kropki jest faktycznie używany do wybierania komponentu.
Składnia pętli 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;
Tutaj pętla Cursor FOR deklaruje „ Tutorial_rec ” jako rekord.
Zmienne kursor
Zmienna kursora służy do odwoływania się do bieżącego wiersza w zestawie wyników, który ma więcej niż jeden wiersz. Może być używany do dowolnego typu zapytań. Jest podobna do zmiennej PL / SQL, w której możemy przypisywać wartości i przekazywać je poprzez podprogram w bazie danych. W ten sposób zmienne kursora zapewniają dużą elastyczność, a dane można uzyskać w scentralizowanym procesie.
PL SQL Strings
Łańcuchy w PL / SQL to grupa znaków w określonej kolejności. Rozmiar ciągu może być dostępny lub nie. Znaki, które mogą być częścią łańcucha, mogą być znakami specjalnymi, spacjami, liczbami i alfanumerycznymi. Jest to więc zbiór wybranych symboli z grupy znaków.
W PL / SQL istnieją trzy kategorie ciągów. Są one wymienione poniżej:
- Ciąg o zmiennej długości: Długość łańcucha nie może przekraczać 32767, a ciąg nie może być wypełniony.
- Sznurek o stałej długości : Długość łańcucha jest podana w deklaracji ciągu. Ciąg jest uzupełniany spacjami do prawej strony, aby zmieścić określoną długość ciągu.
- Duże obiekty postaci (CLOB): Jest to ciąg o zmiennej długości o rozmiarze do 128 TB.
Łańcuchy w PL / SQL mogą być literałami lub zmiennymi. W przypadku literałów używane są symbole cudzysłowu.
Składnia:
'This is Software Testing Help'
Mamy również możliwość dodania cudzysłowu w naszym literale ciągu. Osiąga się to poprzez zachowanie dwóch kolejnych pojedynczych cudzysłowów.
Składnia:
'We can''t go there'
Możemy opisać ograniczniki zdefiniowane przez użytkownika dla literału ciągu, poprzedzając go literą „q”.
Składnia:
q'(We can't go there)'
Deklaracja zmiennych łańcuchowych
W PL / SQL istnieje wiele typów danych, takich jak NCHAR, CHAR, VARCHAR, VARCHAR2, CLOB i NCLOB. Typy danych zestawu znaków narodowych są poprzedzone literą N. Są one używane do przechowywania znaków Unicode.
W łańcuchu o zmiennej długości należy podać maksymalny limit długości łańcucha.
Składnia:
DECLARE subject varchar(10);
Oznacza to, że zmienny temat może pomieścić do 10 znaków i nie więcej. W przypadku pominięcia maksymalnej długości zgłaszany jest błąd kompilacji.
W łańcuchu o stałej długości można użyć typu danych CHAR. Nie jest konieczne definiowanie maksymalnej długości łańcucha o stałej długości. Jeśli limit zostanie pominięty, Oracle przyjmuje domyślną wartość 1.
Składnia:
DECLARE subject char := 'P';
Jeśli zadeklarujesz zmienną CHAR o długości przekraczającej 1, Oracle domyślnie dopełnia zapisaną przez nas wartość spacjami. Odbywa się to do momentu osiągnięcia określonej maksymalnej długości.
Aby złożyć deklarację dla dużego obiektu znakowego, używany jest CLOB. Maksymalna długość nie musi być tutaj wymieniana, a długość jest ustalana przez samą bazę danych Oracle i zależy od rozmiaru bloku bazy danych.
Składnia:
DECLARE l CLOB;
Wskazówki dotyczące wyboru typów danych w PL / SQL:
- Jeśli mamy do czynienia z wartościami, które zawsze mają stałą długość, na przykład, numer telefonu komórkowego, który ma stałą długość i format, należy użyć typu danych CHAR lub NCHAR.
- W przeciwnym razie powinniśmy użyć typu danych VARCHAR2 lub NVARCHAR2.
- Jeśli mamy do czynienia z łańcuchem, który ma więcej niż 32767 znaków, powinniśmy użyć typu danych CLOB lub NCLOB.
Implementacja kodu za pomocą ciągów:
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; /
Wynik powyższego kodu powinien wyglądać następująco:
Funkcje i operatory PL / SQL w łańcuchu
Sl No. | Nazwa | Cele |
---|---|---|
1 | CONCAT (i, j) | Dołącza ciągi i oraz j i zwraca nowy ciąg. |
dwa | ASCII (n) | Zwraca równoważną wartość n w ASCII. |
3 | CHR (rzecz.) | Zwraca znak wraz z odpowiadającą mu wartością n w ASCII. |
4 | INSTR (i, x, start, n) | Znajduje podłańcuch i w ciągu znaków x, a następnie zwraca pozycję wystąpienia. Początek odnosi się do początkowej pozycji wyszukiwania i jest opcjonalnym parametrem. N jest n-tym wystąpieniem łańcucha i jest również opcjonalnym parametrem. |
5 | INSTRB (i) | Zwraca pozycję podciągu w ciągu w bajtach. |
6 | INITCAP (k) | Konwertuje początkowy znak poszczególnych słów w ciągu k na wielkie litery, a następnie zwraca ciąg. |
8 | DŁUGOŚĆB (n) | Zwraca liczbę znaków w łańcuchu m w bajtach dla zestawu znaków jednobajtowych. |
9 | LTRIM (n, x) | Usuwa x znaków z lewej strony łańcucha n. Znak x jest opcjonalnym parametrem, jeśli nie zostanie podany, usuwa wszystkie wiodące spacje ciągu n. |
10 | RTRIM (n, x) | Usuwa x znaków z prawej strony ciągu n. X jest opcjonalnym parametrem, jeśli nie zostanie podany, usuwa wszystkie końcowe spacje ciągu n. |
jedenaście | TRIM ((trim_char OD) x); | Usuwa spacje lub wspomniane znaki z początku, końca lub obu końców ciągu x. |
12 | NIŻSZY (i) | Konwertuje znaki ciągu i na małe litery, a następnie zwraca ciąg. |
13 | GÓRNA (i) | Konwertuje znaki ciągu i na duże litery, a następnie zwraca ciąg. |
14 | LPAD (i, l, x) | Pady ciągną ciąg x w lewo, aby ciąg i miał długość do l. Parametr x jest opcjonalny, jeśli pominięte spacje są dopełniane po lewej stronie łańcucha i. |
piętnaście | RPAD (i, l, x) | Klocki ciągną x w prawo, aby ciąg i miał długość do l. Parametr x jest opcjonalny, jeśli pominięte spacje są dopełniane po prawej stronie łańcucha i. |
16 | NANVL (n, val) | Zwraca val, jeśli n jest równe wartości NaN, w przeciwnym razie zwracane jest n. |
17 | NLSSORT (i) | Modyfikuje metodę sortowania znaków. Należy o tym wspomnieć przed każdą funkcją NLS, w przeciwnym razie zostanie wykonane domyślne sortowanie. |
18 | NLS_INITCAP (i) | Podobna funkcjonalnie do funkcji INITCAP, ale może przyjąć inny rodzaj techniki, jak wspomniano w funkcji NLSSORT. |
19 | NLS_LOWER (m) | Funkcjonalność podobna do funkcji LOWER, ale może przyjąć inny rodzaj techniki, jak wspomniano w funkcji NLSSORT. |
20 | NLS_UPPER (m) | Funkcjonalność podobna do funkcji UPPER, ale może przyjąć inny rodzaj techniki, jak wspomniano w funkcji NLSSORT. |
dwadzieścia jeden | NVL (n, val) | Zwraca val, jeśli x jest równe wartości NULL, w przeciwnym razie zwracane jest n. |
22 | NVL2 (n, val, val2) | Zwraca val, jeśli x nie jest równe wartości NULL, w przeciwnym razie, jeśli x jest równe NULL, zwracana jest wartość 2. |
2. 3 | SOUNDEX (i) | Zwraca ciąg zawierający wokalną reprezentację i. |
24 | SUBSTR (n, początek, l) | Zwraca podłańcuch ciągu n, który zaczyna się od pozycji podanej w start. Parametr l jest opcjonalny i reprezentuje długość podciągu. |
25 | SUBSTRB (n) | Podobna funkcjonalność jak funkcja SUBSTR, ale parametry są w bajtach, a nie w znakach dla systemu znaków jednobajtowych. |
26 | REPLACE (n, s, r) | Zastępuje wystąpienia s ciągiem r z w ciągu n. |
Implementacja kodu z niektórymi funkcjami tekstowymi:
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; /
Wynik powyższego kodu powinien wyglądać następująco:
oprogramowanie do tworzenia aplikacji na Androida dla systemu Windows
Wyjaśnienie powyższego kodu:
- Pierwsze wyjście to POMOC W TESTACH OPROGRAMOWANIA !. Zwraca ciąg wejściowy „Pomoc w testowaniu oprogramowania!” w wielkich literach za pomocą UPPER, funkcja.
- Drugie wyjście to pomoc w testowaniu oprogramowania !. Zwraca ciąg wejściowy POMOC W TESTACH OPROGRAMOWANIA! małymi literami za pomocą funkcja LOWER.
- Trzecie wyjście 2. 3 . Zwraca długość ciągu wejściowego za pomocą funkcji DŁUGOŚĆ, funkcja.
- Czwarte wyjście to Pomoc w testowaniu oprogramowania !. Zwraca pierwszy znak każdego słowa w ciągu wejściowym, zapisany wielką literą za pomocą funkcji Funkcja INITCAP .
- Piąty wynik to softwar. Zwraca podłańcuch ciągu wejściowego z pierwszej pozycji do długości 8, w tym spację za pomocą SUBSTR, funkcja .
- Szóste wyjście to 6. Zwraca pozycję w w ciągu wejściowym za pomocą INSTR, funkcja .
- Siódme wyjście to rozwiązanie do testowania oprogramowania !. Zwraca nowy ciąg, zastępując Wsparcie z rozwiązanie w ciągu wejściowym za pomocą polecenia REPLACE funkcjonować .
- Ósme wyjście to pomoc w testowaniu oprogramowania. Zwraca nowy ciąg poprzez przycięcie znaku ! z prawej strony ciągu wejściowego za pomocą Funkcja RTRIM .
- Dziewiąty wynik to pomoc w testowaniu oprogramowania !. Zwraca nowy ciąg, przycinając spacje wiodące i końcowe z ciągu wejściowego za pomocą Funkcja TRIM .
Często zadawane pytania i odpowiedzi
P # 1) Co to jest kursor w PL / SQL?
Odpowiedź: Po wykonaniu instrukcji SQL baza danych Oracle tworzy pamięć zwaną obszarem kontekstu. Kursor zawiera informacje przetworzone z instrukcji select i zawiera wiersze zaktualizowane przez tę operację SELECT.
P # 2) Co to jest kursor i typ kursora?
Odpowiedź: Po wykonaniu instrukcji SQL baza danych Oracle tworzy pamięć zwaną obszarem kontekstu, która jest tymczasowym obszarem roboczym. Istnieją dwie kategorie kursorów - kursor niejawny i kursor jawny.
Pytanie 3) Jak uruchomić kursor w Oracle?
Odpowiedź: Aby uruchomić kursor w Oracle, składnia jest następująca: OTWARTY<> . CURSORNAME odnosi się do nazwy kursora dostępnej w sekcji deklaracji bloku kodu PL / SQL.
Q # 4) Czy możemy zadeklarować kursor w środku begin?
Odpowiedź: Tak, możemy zadeklarować więcej niż jeden kursor w bloku kodu PL / SQL.
Q # 5) Jak znaleźć długość łańcucha w PL / SQL?
Odpowiedź: Długość łańcucha znaków w PL / SQL możemy znaleźć za pomocą funkcji LENGTH (str). Tutaj str jest ciągiem, dla którego chcemy uzyskać długość. Ta funkcja zwraca wartość liczbową.
P # 6) Co to jest SUBSTR w Oracle?
Odpowiedź: Funkcja SUBSTR podaje określoną liczbę znaków z określonej pozycji ciągu. Składnia to SUBSTR (n, start, l). Zwraca podciąg z łańcucha n, który zaczyna się od pozycji wymienionej w start. Parametr l jest opcjonalny i reprezentuje długość podciągu.
Wniosek
W tym samouczku szczegółowo omówiliśmy niektóre podstawowe pojęcia dotyczące języka PL / SQL.
Omówiliśmy następujące tematy wymienione poniżej:
- PL SQL Cursor: kursor niejawny i kursor jawny
- Ciągi PL / SQL.
- Funkcje i operatory w łańcuchu.
<< PREV Tutorial | NASTĘPNY samouczek >>
rekomendowane lektury
- Samouczek języka PL SQL dla początkujących z przykładami | Co to jest PL / SQL
- Samouczek dotyczący długości tablicy w języku Java z przykładami kodu
- C # samouczek obsługi wyjątków z przykładami kodu
- Słowo kluczowe „this” w języku Java: samouczek z przykładami kodu
- Python DateTime Tutorial z przykładami
- Wykorzystanie kursora w MongoDB z przykładami
- C # funkcje / metody samouczek z przykładami kodu
- MySQL Create View - samouczek z przykładami kodu