pl sql cursor strings
Bu eğiticide, PL SQL İmlecinin ne olduğunu ve Örtük ve Açık İmleçler, döngü için imleç vb. Gibi ilgili kavramları öğreneceğiz. Ayrıca PL / SQL'deki Dize İşlevleri hakkında da bilgi edineceğiz:
İçinde PL SQL Koleksiyonları öğreticisi PL / SQL serisi Kod örnekleri yardımıyla Collection Methods, Varray, Nested table ve Associative Array hakkında bilgi edindik.
Bu makalede, PL / SQL'in sahip olduğu çeşitli imleç türlerini inceleyeceğiz. Kod örnekleri ile farklı imleç türlerinin uygulanmasını da göreceğiz.
Ayrıca, dizeleri ve PL / SQL'de bulunan bazı dahili dizi işlevlerini tartışacağız.
Windows 10 için en iyi vm yazılımı
Ne öğreneceksin:
PL SQL İmleci
Oracle, SQL ifadelerini yürütmek için ayrılmış bellek konumlarına sahiptir ve ardından işlenen bilgileri tutar, Örneğin , güncellenen toplam satır sayısı.
PL / SQL'deki bir imleç, bir ad verir ve bağlam alanı olarak adlandırılan çalışma alanına bir işaretçi görevi görür ve ardından bilgilerini kullanır. SQL ifadesi tarafından işlenen satır sayısını tutar. Bu satırlar aktif küme olarak adlandırılır. Etkin kümenin boyutu, koşulu karşılayan satırların sayısına eşittir.
Aşağıda listelenen iki tür imleç vardır:
- Örtülü İmleç
- Açık imleç
Örtülü İmleçler
Örtük imleçler, SQL deyimleri çalıştırılırken varsayılan olarak Oracle tarafından tahsis edilir. UPDATE, DELETE ve INSERT gibi DML işlemlerinden etkilenen satırları tutar. Bu nedenle, yerinde açık bir imlecimiz olmadığında örtük imleçler kullanılır.
Bir satır eklerken, imleç bu belirli verileri tutar. Benzer şekilde, silme ve güncelleme işlemleri için, etkilenen satırlar imleçler tarafından saklanır. Örtük imleçlere herhangi bir isim verilmez ve bu nedenle geliştiriciler tarafından manipüle edilemez ve içerdiği veriler hiçbir yerde kullanılamaz.
En son güncellenen imleçler, imleç özniteliklerinin yardımıyla kullanılabilir. Bu öznitelikler, tanımlarını tekrar etmeden öğelerin veri türüne ve yapısına atıfta bulunmaya yardımcı olan özelliklerdir. Bir veritabanındaki tüm sütun ve tabloların ortak bir öznitelik (% işareti ile temsil edilir) özellikleri vardır ve bunlar şu şekilde kullanılabilir: sql% öznitelik_adı.
Sl. Yok hayır. | İsim | Amaçlar |
---|---|---|
7 | UZUNLUK (m) | M dizesindeki karakterlerin sayısını döndürür. |
1 | %BULUNDU | Sonucu boolean olarak verir. DELETE, INSERT, UPDATE veya SELECT deyimleri tek veya birden çok satırı etkiliyorsa doğru döndürür. Ya da yanlış döndürülür. |
iki | %BULUNAMADI | Sonucu boole olarak verir ve% FOUND işlevinin ters işlevine sahiptir. DELETE, INSERT, UPDATE veya SELECT deyimleri hiçbir satırı etkilemezse doğru döndürür. Ya da yanlış döndürülür. |
3 | %AÇIK | Sonucu boolean olarak verir. İmleç şu anda açıksa doğru döndürür. Ya da yanlış döndürülür. |
4 | % ROWCOUNT | DELETE, INSERT, UPDATE veya SELECT deyimlerinden getirilen satır sayısının sayısını verir. |
5 | % TYPE | Veritabanının sütun veya değişkeninin veri türünü verir. |
6 | % ROWTYPE | Bir veritabanı satırına eşdeğer kayıt türünü verir. |
TUTOR adlı bir tablo düşünelim.
SELECT * FROM TUTOR;
Aşağıda verilen SQL ifadesi ile bir tablo oluşturduk:
CREATE TABLE TUTOR( CODE INT NOT NULL, SUBJECT VARCHAR(15) NOT NULL, TEACHER VARCHAR(15), REVIEWS VARCHAR (10) NOT NULL, PRIMARY KEY (CODE) );
Aşağıda verilen SQL ifadeleriyle bu tabloya eklenen değerler:
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');
Örtülü imleç ile kod uygulaması:
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; /
Yukarıdaki kodun çıktısı şöyle olmalıdır:
Şimdi TUTOR adlı tablodaki değişiklikleri doğrulayalım.
Tablonun sütunlarını elde etmek için bir SQL ifadesi kullanıyoruz:
SELECT * FROM TUTOR;
Böylece, imlecin gösterdiği gibi, kod = 1 olan öğretmenin adının Zen olarak güncellendiğini görüyoruz.
Açık İmleçler
Geliştiriciler, DML işlemlerini çalıştırmak için kendi kullanıcı tanımlı bağlam alanına sahip olabilir. Böylece onun üzerinde daha fazla güç uygulayabilirler. PL / SQL kod bloğunun bildirim bölümü açık imleçler içerir. Normalde birden çok satırı getiren SELECT işlemleri üzerine kuruludur.
Açık imleç sözdizimi:
DECLARE CURSOR <> IS <> <> BEGIN OPEN <>; FETCH <> INTO ; . . CLOSE ; END;
Açık İmleç aşağıda listelenen işlemlerde çalışır:
# 1) Bellek başlatma için imleç bildirimi. Burada, imleç adı olarak hizmet veren adlandırılmış bir bağlam alanı oluşturulur.
Sözdizimi:
CURSOR tutorial_s IS SELECT code FROM TUTORIAL;
#iki) Bellek ayırma için imleç açma . Güncellenen satırları veritabanından almak için artık bir imleç mevcuttur.
Sözdizimi:
OPEN tutorial_s;
# 3) Verileri almak için imleç getirilir. SELECT işlemi yapıldıktan sonra, elde edilen satırlar ayrılmış belleğe konur ve bunlar artık aktif setler olarak kabul edilir. İmleç bir seferde bir satıra erişebilir.
Sözdizimi:
FETCH tutorial_s INTO c_code;
# 4) Ayrılan belleği boşaltmak için imleç nihayet kapatılır. Tüm kayıtlar birer birer elde edildiğinden, bağlam alanı belleğini serbest bırakmak için imleç kapatılır.
Sözdizimi:
CLOSE tutorial_s;
Açık imleç ile kod uygulaması:
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; /
Yukarıdaki kodun çıktısı şöyle olmalıdır:
Döngü için İmleç
Açık imleçlerle çalışırken, FETCH, OPEN ve CLOSE gibi ifadeler kullanmak yerine FOR döngüsünü kullanabiliriz. Cursor FOR Loop, veritabanından elde edilen satırı gösteren kayıt olarak döngü indeksine sahiptir. İmleci açtıktan sonra, birden çok veri satırını tekrar tekrar sonuç kümesinden kayıt alanlarına getirir.
Son olarak, tüm satırlar elde edildikten sonra imleç kapatılır. Kayıttaki her alana atıfta bulunmak için bir nokta (.) İşareti kullanırız. (.) nokta işareti aslında bir bileşen seçmek için kullanılır.
Cursor For döngüsünün sözdizimi:
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;
Burada, İmleç FOR döngüsü ' Tutorial_rec ’ kayıt olarak.
Değişkenler imleci
Bir imleç değişkeni, birden fazla satırı olan sonuç kümesindeki mevcut satırı ifade etmek için kullanılır. Her tür sorgu için kullanılabilir. Değerler atayabildiğimiz ve veri tabanındaki bir alt program aracılığıyla geçirilebildiğimiz bir PL / SQL değişkenine benzer. Bu nedenle, imleç değişkenleri çok fazla esneklik sağlar ve veriler merkezi bir işlemle elde edilebilir.
PL SQL Dizeleri
PL / SQL'deki dizeler, belirli bir sıradaki bir karakter grubudur. Dizinin boyutu mevcut olabilir veya olmayabilir. Bir dizenin parçası olabilen karakterler özel bir karakter, boşluklar, sayılar ve alfanümerik olabilir. Bu nedenle, bir grup karakterden seçilen semboller kümesidir.
PL / SQL'de üç dizi kategorisi vardır. Bunlar aşağıda listelenmiştir:
- Değişken Uzunluk dizesi: Dizenin uzunluğu 32.767'yi geçemez ve dizede hiçbir dolgu yapılamaz.
- Sabit Uzunluk dizesi : Dizenin uzunluğu, dizge bildiriminde belirtilir. Dize, dizenin belirtilen uzunluğuna uyması için boşluklarla sağ doludur.
- Karakter Büyük Nesneleri (CLOB): Bu, 128 TB'a kadar boyuta sahip değişken uzunluklu bir dizedir.
PL / SQL'deki dizeler değişmez değerler veya değişkenler olabilir. Alıntı sembolleri değişmez değerler için kullanılır.
Sözdizimi:
'This is Software Testing Help'
Ayrıca, dizgi hazır bilgimize bir teklif ekleme seçeneğimiz de var. Bu, iki ardışık tek tırnak işareti tutarak elde edilir.
Sözdizimi:
'We can''t go there'
Değişmez dize için kullanıcı tanımlı sınırlayıcıları bir 'q' harfinin önüne ekleyerek tanımlayabiliriz.
Sözdizimi:
q'(We can't go there)'
Dize Değişkenleri Bildirimi
PL / SQL'de NCHAR, CHAR, VARCHAR, VARCHAR2, CLOB ve NCLOB gibi birden fazla veri türü vardır. Ulusal karakter seti veri türleri N ile başlar. Bunlar Unicode karakterlerini saklamak için kullanılır.
Değişken uzunluklu bir dizide, dizi uzunluğunun maksimum sınırı belirtilmelidir.
Sözdizimi:
DECLARE subject varchar(10);
Bu, değişken öznenin 10 karaktere kadar tutabildiği ve bundan daha fazlasını tutamayacağı anlamına gelir. Maksimum uzunluğun ihmal edilmesi durumunda, derleme hatası atılır.
Sabit uzunlukta bir dizide CHAR veri türü kullanılabilir. Sabit uzunlukta bir dizinin maksimum uzunluğunu tanımlamak gerekli değildir. Sınır atlanırsa, Oracle 1 varsayılan değerini alır.
Sözdizimi:
DECLARE subject char := 'P';
Uzunluğu 1'i aşan bir CHAR değişkeni bildirirseniz, Oracle varsayılan olarak bu değişkene sakladığımız değeri boşluklarla doldurur. Bu, belirtilen maksimum uzunluğa ulaşılana kadar yapılır.
Karakterli büyük bir nesne için bildirim yapmak için CLOB kullanılır. Maksimum uzunluğun burada belirtilmesine gerek yoktur ve uzunluk Oracle veritabanının kendisi tarafından belirlenir ve veritabanı bloğunun boyutuna bağlıdır.
Sözdizimi:
DECLARE l CLOB;
PL / SQL'de Veri Türlerini seçme yönergeleri:
- Her zaman sabit bir uzunluğa sahip değerlerle uğraşıyorsak, Örneğin, sabit uzunluk ve biçime sahip cep telefonu numarası, CHAR veya NCHAR veri türünü kullanmalıyız.
- Aksi takdirde, VARCHAR2 veya NVARCHAR2 veri türünü kullanmalıyız.
- 32.767 karakterden daha büyük bir dizeyle uğraşıyorsak, CLOB veya NCLOB veri türünü kullanmalıyız.
Dizelerle kod uygulaması:
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; /
Yukarıdaki kodun çıktısı şöyle olmalıdır:
Dizede PL / SQL İşlevleri ve Operatörleri
Sl. Yok hayır. | İsim | Amaçlar |
---|---|---|
1 | BİRLEŞTİR (i, j) | İ ve j dizelerini ekler ve yeni dizeyi döndürür. |
iki | ASCII (n) | N'nin eşdeğer ASCII değerini döndürür. |
3 | CHR (n) | N'nin eşdeğer ASCII değeriyle birlikte karakteri döndürür. |
4 | INSTR (i, x, start, n) | X dizesindeki i alt dizesini bulur ve ardından oluşma konumunu döndürür. Başlangıç, aramanın başlangıç konumunu ifade eder ve isteğe bağlı bir parametredir. N, dizenin n'inci oluşumudur ve ayrıca isteğe bağlı bir parametredir. |
5 | INSTRB (i) | Bir dizedeki bir alt dizenin konumunu bayt cinsinden döndürür. |
6 | INITCAP (k) | K dizesindeki tek tek kelimelerin başlangıç karakterini büyük harfe dönüştürür ve ardından dizeyi geri verir. |
8 | UZUNLUKB (n) | Tek baytlık karakter kümesi için m dizesindeki karakter sayısını bayt cinsinden döndürür. |
9 | LTRIM (n, x) | N dizesinin solundan x karakteri kaldırır. X, sağlanmadıysa isteğe bağlı bir parametredir, n dizesinin tüm öndeki boşluklarını kaldırır. |
10 | RTRIM (n, x) | N dizesinin sağından x karakteri kaldırır. X, sağlanmadıysa isteğe bağlı bir parametredir, n dizesinin tüm sondaki boşluklarını kaldırır. |
on bir | TRIM ((trim_char FROM) x); | X dizesinin başındaki, sonundaki veya her iki ucundaki boşlukları veya belirtilen karakterleri kaldırır. |
12 | DÜŞÜK (i) | İ dizesinin karakterlerini küçük harfe dönüştürür ve ardından dizeyi döndürür. |
13 | ÜST (i) | İ dizesinin karakterlerini büyük harfe dönüştürür ve ardından dizeyi döndürür. |
14 | LPAD (i, l, x) | İp uzunluğunu l'ye getirmek için solda x dizesi. Eksik boşluklar i dizesinin soluna doldurulmuşsa x parametresi isteğe bağlıdır. |
on beş | RPAD (i, l, x) | İp uzunluğunu l'ye getirmek için sağdaki x dizgisi. İhmal edilen boşluklar i dizesinin sağına doldurulmuşsa x parametresi isteğe bağlıdır. |
16 | NANVL (n, val) | N, NaN değerine eşitse val döndürür, aksi takdirde n döndürülür. |
17 | NLSSORT (i) | Karakterlerin sıralama yöntemini değiştirir. Herhangi bir NLS işlevinden önce belirtilmelidir, aksi takdirde varsayılan sıralama yapılacaktır. |
18 | NLS_INITCAP (i) | İşlevsellik açısından INITCAP işlevine benzer, ancak NLSSORT işlevinde belirtildiği gibi farklı bir teknik alabilir. |
19 | NLS_LOWER (m) | İşlevsellik açısından DÜŞÜK işlevine benzer, ancak NLSSORT işlevinde belirtildiği gibi farklı bir teknik alabilir. |
yirmi | NLS_UPPER (m) | İşlevsellik açısından UPPER işlevi ile benzerdir ancak IN işlevi NLSSORT'da belirtildiği gibi farklı bir teknik alabilir. |
yirmi bir | NVL (n, değer) | X NULL değere eşitse val döndürür, aksi takdirde n döndürülür. |
22 | NVL2 (n, değer, değer2) | X NULL değere eşit değilse val döndürür, aksi takdirde x NULL değerine eşitse val2 döndürülür. |
2. 3 | SOUNDEX (i) | İ'nin vokal temsiline sahip bir dizge döndürür. |
24 | SUBSTR (n, başlangıç, l) | Başlangıçta belirtilen konumdan başlayan n dizesinin bir alt dizesini döndürür. L parametresi isteğe bağlıdır ve alt dizenin uzunluğunu temsil eder. |
25 | SUBSTRB (n) | İşlevsellik açısından SUBSTR işlevine benzer, ancak parametreler bayt cinsindendir ve tek bir bayt karakter sistemi için karakterde değildir. |
26 | DEĞİŞTİR (n, s, r) | S oluşumlarını, n dizesindeki r ile değiştirir. |
Bazı dize işlevleriyle kod uygulaması:
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; /
Yukarıdaki kodun çıktısı şöyle olmalıdır:
dinlendirici web hizmetleri java ile ilgili mülakat soruları
Yukarıdaki kodun açıklaması:
- İlk çıktı YAZILIM TESTİ YARDIMI !. Girdi dizesini verir 'Yazılım testi yardımı!' büyük harfle ÜST işlevi.
- İkinci çıktı yazılım testi yardımı !. Girdi dizesini verir YAZILIM TESTİ YARDIMI! küçük harfle DÜŞÜK işlevi.
- Üçüncü çıktı 2. 3 . Girdi dizesinin uzunluğunu döndürür. UZUNLUK işlevi.
- Dördüncü çıktı Yazılım Testi Yardımı !. Giriş dizesinin her kelimesinin ilk karakterini büyük harfle döndürür. INITCAP işlevi .
- Beşinci çıktı yazılım. İlk konumdan bir boşluk içeren 8 uzunluğa kadar giriş dizesinin bir alt dizesini döndürür. SUBSTR işlevi .
- Altıncı çıktı 6. Konumunu verir içinde giriş dizesinde INSTR işlevi .
- Yedinci çıktı yazılım test çözümü !. Değiştirerek yeni bir dize döndürür Yardım Edin ile çözüm REPLACE yardımı ile giriş dizesinde işlevi .
- Sekizinci çıktı yazılım testi yardımı. Karakteri kırparak yeni bir dize döndürür ! giriş dizesinin sağından RTRIM işlevi .
- Dokuzuncu çıktı yazılım testi yardımı !. Giriş dizesinin başındaki ve sonundaki boşlukları, yardımıyla yeni bir dize döndürür. KIRP işlevi .
Sıkça Sorulan Sorular ve Cevaplar
S # 1) PL / SQL'de imleç nedir?
Cevap: Bir SQL ifadesi yürütüldükten sonra, Oracle veritabanı bağlam alanı adı verilen bir bellek oluşturur. Bir imleç, bir select deyiminden işlenen bilgilere sahiptir ve bu SELECT işlemiyle güncellenen satırları içerir.
S # 2) İmleç ve imleç türü nedir?
Cevap: Bir SQL ifadesi yürütüldükten sonra, Oracle veritabanı geçici bir çalışma alanı olan bağlam alanı adı verilen bir bellek oluşturur. İki imleç kategorisi vardır - Örtük imleç ve Açık imleç.
S # 3) Oracle'da bir imleci nasıl çalıştırırım?
Cevap: Oracle'da bir imleci çalıştırmak için sözdizimi şöyledir: AÇIK<> . CURSORNAME, PL / SQL kod bloğunun bildirim bölümünde bulunan imlecin adını ifade eder.
S # 4) Başlangıçta imleci ilan edebilir miyiz?
Cevap: Evet, bir PL / SQL kod bloğu içinde birden fazla imleç bildirebiliriz.
S # 5) PL / SQL'de bir dizenin uzunluğunu nasıl bulursunuz?
Cevap: Bir dizgenin uzunluğunu PL / SQL'de LENGTH (str) fonksiyonu yardımıyla bulabiliriz. Burada str, uzunluğunu elde etmek istediğimiz dizedir. Bu işlev sayısal bir değer döndürür.
S # 6) Oracle'da SUBSTR nedir?
Cevap: SUBSTR işlevi, bir dizenin belirli bir konumundan belirli sayıda karakter verir. Sözdizimi SUBSTR (n, başlangıç, l) şeklindedir. Başlangıçta belirtilen konumdan başlayan n dizesinden bir alt dize döndürür. L parametresi isteğe bağlıdır ve alt dizenin uzunluğunu temsil eder.
Sonuç
Bu eğitimde, PL / SQL'in bazı temel kavramlarını ayrıntılı olarak tartıştık.
Aşağıda listelenen aşağıdaki konuları ele aldık:
- PL SQL İmleci: Örtülü İmleç ve Açık İmleç
- PL / SQL Dizeleri.
- Dizgede Fonksiyonlar ve Operatörler.
<< PREV Tutorial | SONRAKİ Eğitici >>
Önerilen Kaynaklar
- Örneklerle Yeni Başlayanlar İçin PL SQL Eğitimi | PL / SQL Nedir
- Kod Örnekleriyle Java Dizi Uzunluğu Eğitimi
- Kod Örnekleriyle C # İstisna İşleme Eğitimi
- Java 'bu' Anahtar Kelime: Kod Örnekleriyle Eğitim
- Örneklerle Python DateTime Eğitimi
- MongoDB'de İmleç Kullanımı Örneklerle
- Kod Örnekleriyle C # İşlevleri / Yöntemleri Öğreticisi
- MySQL Kod Örnekleriyle Görünüm Öğreticisini Oluştur