pl sql cursor strings
Dans ce didacticiel, nous allons apprendre ce qu'est un curseur PL SQL et les concepts associés tels que les curseurs implicites et explicites, le curseur pour la boucle, etc. Nous en apprendrons également davantage sur les fonctions de chaîne en PL / SQL:
Dans le Collections PL SQL tutoriel du Série PL / SQL , nous avons découvert les méthodes de collection, les Varray, les tables imbriquées et les tableaux associatifs à l'aide d'exemples de code.
Dans cet article, nous explorerons les différents types de curseurs dont dispose PL / SQL. Nous verrons également l'implémentation de différents types de curseurs avec des exemples de code.
Nous aborderons également les chaînes et certaines des fonctions de chaîne intégrées disponibles en PL / SQL.
Tutoriel Visual Studio Team Foundation Server 2015
Ce que vous apprendrez:
Curseur PL SQL
Oracle a des emplacements de mémoire dédiés pour l'exécution des instructions SQL, puis il conserve les informations traitées, par exemple , le nombre total de lignes mises à jour.
Un curseur en PL / SQL donne un nom et agit comme un pointeur vers la zone de travail appelée zone de contexte, puis utilise ses informations. Il conserve le nombre de lignes traitées par l'instruction SQL. Ces lignes sont appelées comme un ensemble actif. La taille de l'ensemble actif est égale au nombre de lignes qui remplissent la condition.
Il existe deux types de curseurs répertoriés ci-dessous:
- Curseur implicite
- Curseur explicite
Curseurs implicites
Les curseurs implicites sont alloués par défaut par Oracle lors de l'exécution des instructions SQL. Il contient les lignes affectées par les opérations DML telles que UPDATE, DELETE et INSERT. Ainsi, les curseurs implicites sont utilisés lorsque nous n’avons pas de curseur explicite en place.
Pendant que nous insérons une ligne, le curseur conserve ces données particulières. De même, pour les opérations de suppression et de mise à jour, les lignes affectées sont stockées par les curseurs. Les curseurs implicites ne reçoivent aucun nom et ne peuvent donc pas être manipulés par les développeurs et les données qu'ils contiennent ne peuvent être utilisées nulle part.
Les derniers curseurs mis à jour peuvent être utilisés à l'aide des attributs de curseur. Ces attributs sont les propriétés qui aident à faire référence au type de données et à la structure des éléments sans répéter leurs définitions. Toutes les colonnes et tables d'une base de données ont un attribut commun (représenté par le signe%) et peuvent être utilisées comme sql% nom_attribut.
Sl No. | Nom | Finalités |
---|---|---|
7 | LONGUEUR (m) | Renvoie le nombre de caractères de la chaîne m. |
1 | %A TROUVÉ | Donne le résultat en booléen. Renvoie true si les instructions DELETE, INSERT, UPDATE ou SELECT affectent une ou plusieurs lignes. Ou bien false est renvoyé. |
deux | %PAS TROUVÉ | Donne le résultat en booléen et a la fonctionnalité inverse de% FOUND. Renvoie true si les instructions DELETE, INSERT, UPDATE ou SELECT n'affectent aucune ligne. Ou bien false est renvoyé. |
3 | %EST OUVERT | Donne le résultat en booléen. Renvoie true si le curseur est actuellement ouvert. Ou bien false est renvoyé. |
4 | % ROWCOUNT | Donne le nombre de lignes extraites des instructions DELETE, INSERT, UPDATE ou SELECT. |
5 | %TAPER | Donne le type de données de la colonne ou de la variable de la base de données. |
6 | % ROWTYPE | Donne le type d'enregistrement qui équivaut à une ligne de base de données. |
Considérons une table nommée TUTOR.
SELECT * FROM TUTOR;
Nous avons créé une table avec l'instruction SQL donnée ci-dessous:
CREATE TABLE TUTOR( CODE INT NOT NULL, SUBJECT VARCHAR(15) NOT NULL, TEACHER VARCHAR(15), REVIEWS VARCHAR (10) NOT NULL, PRIMARY KEY (CODE) );
Les valeurs insérées dans cette table avec les instructions SQL indiquées ci-dessous:
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');
Implémentation de code avec le curseur implicite:
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; /
La sortie du code ci-dessus doit être:
Vérifions maintenant les changements reflétés dans le tableau nommé TUTOR.
Nous utilisons une instruction SQL pour obtenir les colonnes de la table:
SELECT * FROM TUTOR;
Ainsi, nous voyons que comme indiqué par le curseur, le nom de l'enseignant avec code = 1, est mis à jour en Zen.
Curseurs explicites
Les développeurs peuvent avoir leur propre zone de contexte définie par l'utilisateur pour exécuter les opérations DML. Ainsi, ils peuvent exercer plus de pouvoir sur lui. La section de déclaration du bloc de code PL / SQL contient des curseurs explicites. Il est normalement construit sur des opérations SELECT qui récupèrent plusieurs lignes.
Syntaxe du curseur explicite:
DECLARE CURSOR <> IS <> <> BEGIN OPEN <>; FETCH <> INTO ; . . CLOSE ; END;
Explicit Cursor fonctionne sur les processus répertoriés ci-dessous:
#1) Déclaration du curseur pour l'initialisation de la mémoire. Ici, une zone de contexte nommée est créée qui sert de nom de curseur.
Syntaxe:
CURSOR tutorial_s IS SELECT code FROM TUTORIAL;
#deux) Ouverture du curseur pour l'allocation de mémoire . Un curseur est maintenant disponible pour récupérer les lignes mises à jour de la base de données.
Syntaxe:
OPEN tutorial_s;
# 3) Le curseur est récupéré pour obtenir les données. Une fois l'opération SELECT effectuée, les lignes obtenues sont placées dans la mémoire allouée et elles sont désormais considérées comme des ensembles actifs. Le curseur peut accéder à une ligne à la fois.
Syntaxe:
FETCH tutorial_s INTO c_code;
# 4) Le curseur est finalement fermé pour libérer la mémoire allouée. Comme tous les enregistrements sont obtenus un par un, le curseur se ferme pour libérer la mémoire de la zone de contexte.
Syntaxe:
CLOSE tutorial_s;
Implémentation de code avec curseur explicite:
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; /
La sortie du code ci-dessus doit être:
Curseur pour la boucle
Tout en travaillant avec des curseurs explicites, nous pouvons utiliser la boucle FOR au lieu d'utiliser des instructions telles que FETCH, OPEN et CLOSE. Cursor FOR Loop a l'index de la boucle comme enregistrement qui pointe vers la ligne obtenue à partir de la base de données. Ensuite, après avoir ouvert le curseur, il récupère les multiples lignes de données à plusieurs reprises du jeu de résultats dans les champs d'enregistrement.
Enfin, le curseur se ferme une fois toutes les lignes obtenues. Nous utilisons un signe point (.) Pour désigner chaque champ de l'enregistrement. (.) Le signe pointillé est en fait utilisé pour sélectionner un composant.
La syntaxe de la boucle 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;
Ici, la boucle Cursor FOR déclare « Tutorial_rec » comme un record.
Curseur de variables
Une variable de curseur est utilisée pour faire référence à la ligne actuelle dans le jeu de résultats qui a plus d'une ligne. Il peut être utilisé pour tout type de requête. Il est similaire à une variable de PL / SQL, où nous pouvons attribuer des valeurs et peuvent être passés via un sous-programme dans la base de données. Ainsi, les variables de curseur offrent beaucoup de flexibilité et les données peuvent être obtenues dans un processus centralisé.
Chaînes PL SQL
Les chaînes en PL / SQL sont un groupe de caractères dans un ordre particulier. La taille de la chaîne peut être disponible ou non. Les caractères qui peuvent faire partie d'une chaîne peuvent être un caractère spécial, des espaces, des nombres et des caractères alphanumériques. Il s'agit donc d'un ensemble de symboles choisis parmi un groupe de caractères.
Il existe trois catégories de chaînes en PL / SQL. Ceux-ci sont énumérés ci-dessous:
- Chaîne de longueur variable: La longueur de la chaîne ne peut pas dépasser 32 767 et il ne peut y avoir aucun remplissage de la chaîne.
- Chaîne de longueur fixe : La longueur de la chaîne est mentionnée dans la déclaration de chaîne. La chaîne est complétée à droite avec des espaces pour s'adapter à la longueur spécifiée de la chaîne.
- Grands objets de caractère (CLOB): Il s'agit d'une chaîne de longueur variable d'une taille allant jusqu'à 128 To.
Les chaînes en PL / SQL peuvent être des littéraux ou des variables. Les symboles de citation sont utilisés pour les littéraux.
Syntaxe:
'This is Software Testing Help'
De plus, nous avons la possibilité d'ajouter un guillemet dans notre chaîne littérale. Ceci est réalisé en conservant deux guillemets simples consécutifs.
Syntaxe:
'We can''t go there'
Nous pouvons décrire les délimiteurs définis par l'utilisateur pour le littéral de chaîne en le préfixant avec une lettre «q».
Syntaxe:
q'(We can't go there)'
Déclaration des variables de chaîne
Il existe plusieurs types de données dans PL / SQL comme NCHAR, CHAR, VARCHAR, VARCHAR2, CLOB et NCLOB. Les types de données des jeux de caractères nationaux sont préfixés par N. Ils sont utilisés pour stocker les caractères Unicode.
Dans une chaîne de longueur variable, la limite maximale de la longueur de chaîne doit être mentionnée.
Syntaxe:
DECLARE subject varchar(10);
Cela signifie que le sujet variable est capable de contenir jusqu'à 10 caractères et pas plus que cela. Dans le cas où la longueur maximale est omise, une erreur de compilation est générée.
Dans une chaîne de longueur fixe, le type de données CHAR peut être utilisé. Il n'est pas nécessaire de définir la longueur maximale d'une chaîne de longueur fixe. Si la limite est omise, Oracle prend la valeur par défaut de 1.
Syntaxe:
DECLARE subject char := 'P';
Si vous déclarez une variable CHAR avec une longueur supérieure à 1, Oracle remplit par défaut la valeur que nous avons stockée dans cette variable avec des espaces. Ceci est fait jusqu'à ce que la longueur maximale spécifiée soit atteinte.
Pour faire une déclaration pour un objet de grand caractère, CLOB est utilisé. La longueur maximale n'a pas besoin d'être mentionnée ici et la longueur est définie par la base de données Oracle elle-même et dépend de la taille du bloc de base de données.
Syntaxe:
DECLARE l CLOB;
Instructions pour choisir les types de données en PL / SQL:
- Si nous avons affaire à des valeurs qui ont toujours une longueur fixe, par exemple, le numéro de téléphone mobile qui a une longueur et un format constants, nous devrions utiliser le type de données CHAR ou NCHAR.
- Sinon, nous devrions utiliser le type de données VARCHAR2 ou NVARCHAR2.
- Si nous avons affaire à une chaîne de plus de 32 767 caractères, nous devons utiliser le type de données CLOB ou NCLOB.
Implémentation de code avec des chaînes:
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; /
La sortie du code ci-dessus doit être:
Fonctions et opérateurs PL / SQL en chaîne
Sl No. | Nom | Finalités |
---|---|---|
1 | CONCAT (i, j) | Ajoute les chaînes i et j et renvoie la nouvelle chaîne. |
deux | ASCII (n) | Renvoie la valeur ASCII équivalente de n. |
3 | CHR (n) | Renvoie le caractère avec la valeur ASCII équivalente de n. |
4 | INSTR (i, x, début, n) | Recherche la sous-chaîne i dans la chaîne x, puis renvoie la position d'occurrence. Le début fait référence à la position de début de la recherche et est un paramètre facultatif. Le n est la nième occurrence de la chaîne et est également un paramètre facultatif. |
5 | INSTRB (i) | Renvoie la position d'une sous-chaîne dans une chaîne en octets. |
6 | INITCAP (k) | Convertit le caractère initial des mots individuels de la chaîne k en majuscules, puis restitue la chaîne. |
8 | LONGUEURB (n) | Renvoie le nombre de caractères de la chaîne m en octets pour le jeu de caractères à un octet. |
9 | LTRIM (n, x) | Supprime x caractères à gauche de la chaîne n. Le x est un paramètre facultatif s'il n'est pas fourni, supprime tous les espaces de début de la chaîne n. |
dix | RTRIM (n, x) | Supprime x caractères à droite de la chaîne n. Le x est un paramètre facultatif s'il n'est pas fourni, supprime tous les espaces de fin de la chaîne n. |
Onze | TRIM ((trim_char FROM) x); | Supprime les espaces ou les caractères mentionnés au début, à la fin ou aux deux extrémités de la chaîne x. |
12 | INFÉRIEUR (i) | Convertit les caractères de la chaîne i en minuscules, puis renvoie la chaîne. |
13 | SUPÉRIEUR (i) | Convertit les caractères de la chaîne i en majuscules, puis renvoie la chaîne. |
14 | LPAD (i, l, x) | Remplit la chaîne x vers la gauche pour rendre la chaîne i à l. Le paramètre x est facultatif, si les espaces omis sont remplis à gauche de la chaîne i. |
quinze | RPAD (i, l, x) | Remplit la chaîne x vers la droite pour que la chaîne i devienne l. Le paramètre x est facultatif, si les espaces omis sont remplis à droite de la chaîne i. |
16 | NANVL (n, val) | Renvoie val si n est égal à la valeur NaN, sinon n est renvoyé. |
17 | NLSSORT (i) | Modifie la méthode de tri des caractères. Il doit être mentionné avant toute fonction NLS, sinon le tri par défaut sera effectué. |
18 | NLS_INITCAP (i) | Fonctionnalité similaire à la fonction INITCAP, mais elle peut prendre un autre type de technique, comme mentionné dans la fonction NLSSORT. |
19 | NLS_LOWER (m) | Fonctionnalité similaire à la fonction LOWER, mais elle peut prendre un autre type de technique, comme mentionné dans la fonction NLSSORT. |
vingt | NLS_UPPER (m) | Fonctionnalité similaire à la fonction UPPER, mais elle peut prendre un autre type de technique comme mentionné dans la fonction NLSSORT. |
vingt et un | NVL (n, val) | Renvoie val si x est égal à la valeur NULL, sinon n est renvoyé. |
22 | NVL2 (n, val, val2) | Renvoie val si x n'est pas égal à la valeur NULL, sinon si x est égal à NULL, val2 est renvoyé. |
2. 3 | SONDEX (i) | Renvoie une chaîne ayant la représentation vocale de i. |
24 | SUBSTR (n, début, l) | Renvoie une sous-chaîne de chaîne n qui commence à partir de la position mentionnée dans start. Le paramètre l est facultatif et représente la longueur de la sous-chaîne. |
25 | SUBSTRB (n) | Fonctionnalité similaire à celle de la fonction SUBSTR mais les paramètres sont en octets et non en caractères pour un système de caractères à un octet. |
26 | REMPLACER (n, s, r) | Remplace les occurrences de s par la chaîne r avec dans la chaîne n. |
Implémentation de code avec certaines fonctions de chaîne:
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; /
La sortie du code ci-dessus doit être:
nombre aléatoire c ++ entre 0 et 100
Explication du code ci-dessus:
- La première sortie est AIDE AU TEST DU LOGICIEL!. Renvoie la chaîne d'entrée «Aide aux tests de logiciels!» en majuscules à l'aide de Fonction UPPER.
- La deuxième sortie est aide aux tests de logiciels !. Renvoie la chaîne d'entrée AIDE AU TEST DE LOGICIEL! en minuscules à l'aide de la fonction LOWER.
- La troisième sortie 2. 3 . Renvoie la longueur de la chaîne d'entrée à l'aide du Fonction LENGTH.
- La quatrième sortie est Aide aux tests de logiciels !. Renvoie le premier caractère de chaque mot de la chaîne d'entrée en majuscules à l'aide du Fonction INITCAP .
- La cinquième sortie est softwar. Renvoie une sous-chaîne de la chaîne d'entrée de la première position à une longueur de 8, y compris un espace à l'aide de Fonction SUBSTR .
- La sixième sortie est 6. Renvoie la position de dans dans la chaîne d'entrée à l'aide du Fonction INSTR .
- La septième sortie est solution de test de logiciel !. Renvoie une nouvelle chaîne en remplaçant aider avec Solution dans la chaîne d'entrée à l'aide de REPLACE fonction .
- La huitième sortie est aide aux tests de logiciels. Renvoie une nouvelle chaîne en coupant le caractère ! à droite de la chaîne d'entrée à l'aide de Fonction RTRIM .
- La neuvième sortie est aide aux tests de logiciels !. Renvoie une nouvelle chaîne en coupant les espaces de début et de fin de la chaîne d'entrée à l'aide du Fonction TRIM .
Foire aux questions et réponses
Q # 1) Qu'est-ce que le curseur en PL / SQL?
Répondre: Après l'exécution d'une instruction SQL, la base de données Oracle crée une mémoire appelée zone de contexte. Un curseur a les informations traitées à partir d'une instruction SELECT et contient les lignes mises à jour par cette opération SELECT.
Q # 2) Qu'est-ce qu'un curseur et un type de curseur?
Répondre: Après l'exécution d'une instruction SQL, la base de données Oracle crée une mémoire appelée zone de contexte qui est une zone de travail temporaire. Il existe deux catégories de curseurs: le curseur implicite et le curseur explicite.
Q # 3) Comment exécuter un curseur dans Oracle?
Répondre: Pour exécuter un curseur dans Oracle, la syntaxe est: OUVERT<> . Le CURSORNAME fait référence au nom du curseur disponible dans la section déclaration du bloc de code PL / SQL.
Q # 4) Pouvons-nous déclarer le curseur à l'intérieur de begin?
Répondre: Oui, nous pouvons déclarer plus d'un curseur dans un bloc de code PL / SQL.
Q # 5) Comment trouvez-vous la longueur d'une chaîne en PL / SQL?
Répondre: Nous pouvons trouver la longueur d'une chaîne en PL / SQL à l'aide de la fonction LENGTH (str). Ici, str est la chaîne dont nous voulons obtenir la longueur. Cette fonction renvoie une valeur numérique.
Q # 6) Qu'est-ce que SUBSTR dans Oracle?
Répondre: La fonction SUBSTR donne un nombre particulier de caractères à partir d'une position spécifique d'une chaîne. La syntaxe est SUBSTR (n, start, l). Il renvoie une sous-chaîne de la chaîne n qui commence à partir de la position mentionnée dans start. Le paramètre l est facultatif et représente la longueur de la sous-chaîne.
Conclusion
Dans ce tutoriel, nous avons discuté en détail de certains des concepts de base de PL / SQL.
Nous avons couvert les sujets suivants énumérés ci-dessous:
- PL SQL Cursor: curseur implicite et curseur explicite
- Chaînes PL / SQL.
- Fonctions et opérateurs en chaîne.
<< PREV Tutorial | Tutoriel SUIVANT >>
lecture recommandée
- Tutoriel PL SQL pour les débutants avec des exemples | Qu'est-ce que PL / SQL
- Tutoriel Java Array Length avec des exemples de code
- Tutoriel sur la gestion des exceptions C # avec des exemples de code
- Mot-clé Java 'this': Tutoriel avec des exemples de code
- Tutoriel Python DateTime avec des exemples
- Utilisation du curseur dans MongoDB avec des exemples
- Tutoriel sur les fonctions / méthodes C # avec des exemples de code
- Tutoriel MySQL Create View avec des exemples de code