TRANSACT-SQL
Transact SQL est un langage procdural (par opposition
SQL qui est un langage dclaratif) qui permet de programmer des algorithmes de traitement des donnes au sein des SGBDR Sybase Adaptive Server et Microsoft SQL Server. Il a t cr par Sybase INC. la fin des annes 80 pour rpondre aux besoins d'extension de la programmation des bases de donnes pour son SGBDR. Ce langage est donc commun aux deux produits (MS SQL Server et Sybase Adaptive) avec des diffrences mineures dans les implmentations. Il sert programmer des procdures stockes et des triggers (dclencheurs).
DECLARE @VariableName DataType; Variable globale: DECLARE @@VariableName DataType; Dclaration multiples: DECLARE @Variable1 DataType1, @Variable2 DataType2, @Variable_n DataType_n;
"underscore". Les caractres spciaux et le blanc ne sont pas admis. On se contentera d'utiliser les 37 caractres de base : ['A'..'Z', '0'..'9', '_'] La casse n'a pas d'importance.
Types de donnes
Type de donnes
Table : Type de donnes spcial qui permet de stocker
un jeu de rsultats pour un traitement ultrieur. Son utilisation principale concerne le stockage temporaire d'un ensemble de lignes, qui doivent tre renvoyes sous forme de jeu de rsultats d'une fonction table. Une variable de type table se comporte comme une variable locale. Elle possde une porte bien dfinie, qui reprsente la fonction, la procdure stocke ou le lot d'instructions dans lequel elle est dclare.
select @i=3,@j=4,@str='TSDI
Select @i
Affichage Message avec PRINT:
Exemple
DECLARE @FirstName nvarchar(20), @LastName nvarchar(20), @FullName nvarchar(40), @DateHired date, @EmplStatus int,
@IsMarried bit, @WeeklyHours decimal(6,2), @HourlySalary SmallMoney, @WeeklySalary SmallMoney; SET @FirstName = N'Samuel'; SET @LastName = N'Weinberg'; SET @FullName = @LastName + N', ' + @FirstName; SET @DateHired = N'12/05/1998'; SET @IsMarried = 1; SET @EmplStatus = 2; SET @WeeklyHours = 36.50; SET @HourlySalary = 15.72; SET @WeeklySalary = @WeeklyHours * @HourlySalary; SELECT @FullName As [Full Name], @DateHired AS [Date Hired], @EmplStatus AS [Empl Status], @IsMarried AS [Married?], @WeeklyHours AS Hours, @HourlySalary AS Hourly, @WeeklySalary AS Weekly;
Bloc dinstructions
Un bloc dinstruction est un ensemble dinstruction T-
SQL qui sont considr comme un tout ( une seule). Un bloc dinstruction peut contenir dautres sous blocs.
Begin --instruction(1) --instruction(2) --instruction(N) end
Instructions conditionnelles
Si une condition est True:
IF [NOT] condition instruction[ELSE instruction]
Exemple: DECLARE @DateEmbauche datetime, @CurrentDate datetime SET @DateEmbauche = '04/10/2010 ' SET @CurrentDate = ' 11/04/2011 ' IF @DateEmbauche < @CurrentDate PRINT 'Exprience exige' ELSE PRINT 'Bienvenue';
Instructions conditionnelles
IF [NOT] EXISTS(requte select) instruction [ELSE instruction]
Exemple2:
if exists ( select * from pilote where ville = 'tanger') print 'il exist des pilotes tangerois' else print 'aucun pilote nest tangerois'
Instructions conditionnelles
CASE: La fonction CASE est une expression Transact-
QL spciale qui permet l'affichage d'une valeur de remplacement en fonction de la Valeur d'une colonne. Ce changement est temporaire. Par consquent, aucune Modification permanente n'est apporte aux donnes. Syntaxe:
CASE expression WHEN valeur1 THEN rsultats WHEN Value2 THEN rsultats WHEN Value_n THEN rsultats END
Instructions conditionnelles
Exemple:
SELECT marque,capacite, CASE WHEN capacite<=400 THEN 'Petit avion' WHEN capacite<600 and capacite>=400 THEN 'Avion Moyen' WHEN capacite>=600 THEN 'Grand Avion' END AS 'Comentaire' FROM avion ORDER BY capacite
Instructions itrative
WHILE condition instruction
DECLARE @Numro As int SET @numro = 1 WHILE @numro < 5 BEGIN SELECT @ numro as numro SET @ numro = @numro + 1 END
Fonctions utilisateur
Les fonctions utilisateurs sont de trois types. Il y a les
fonctions scalaires, les fonctions tables en ligne et les fonctions multi-instructions. Une fonction peu accepter des arguments, et ne peu retourner que deux types de donnes : une valeur scalaire ou une table. Le champ daction dune fonction est vraiment limit puisquil nest possible de modifier que des objets locaux la fonction. Il nest pas possible de modifier des objets de la base, contenus lextrieur de la fonction.
Avec du code:
rsultat. Lors de la cration d'une fonction, vous devez spcifier le type de valeur que la fonction renverrait. Pour fournir cette information, aprs le nom de la fonction, tapez le mot-cl RETURNS suivi d'une dfinition pour un type de donnes. Voici un exemple simple :
CORPS DE LA FONCTION
Le corps d'une fonction commence
par BEGIN et se termine avec les mots-cls END. END Entre les mots-cls BEGIN et END, qui est la section qui reprsente le corps de la fonction, vous pouvez dfinir l'affectation que doit excuter la fonction. Aprs l'excution de cette affectation, juste avant le mot-cl END, vous devez spcifier la valeur renvoye par la fonction.
La valeur de retour
La valeur renvoye par la fonction est faite en tapant le
nom. Pour le faire, saisissez le nom de la base de donnes dans laquelle il a t cr, suivi du schma dbo , suivi du nom de la fonction et ses parenthses. La formule utiliser est la suivante : On utilise PRINT ou SELECT pour afficher la valeur de la fonction dans une fentre de requte:
DatabaseName .dbo. FunctionName ()
Exemple
Exemple
CREATE FUNCTION Addition() RETURNS int BEGIN DECLARE @Number1 int SET @Numro1 = 588 RETURN @Number1 + 1450 END
Appel de fonction:
fournie avec certaines valeurs. Une valeur externe qui est fournie une fonction est appele un paramtre. Une fonction peut galement prendre plusieurs paramtres. Dans le corps de la fonction, vous pouvez utiliser les paramtres comme si vous connaissiez dj leur valeur.
Exemple
CREATE FUNCTION Addition(@Number1 Decimal(6,2), @Number2 Decimal(6,2)) RETURNS Decimal(6,2) BEGIN DECLARE @Result Decimal(6,2) SET @Result = @Number1 + @Number2 RETURN @Result END;
Exemples:
Ecrire une fonction qui accepte en paramtre une
Exemple
Ecrire une fonction qui retourne la liste des pilotes qui ont vol
Paris.
create function PiloteParis() returns @tbl table( num int , nom varchar(20) ) as begin insert into @tbl(num,nom) select pil# , nom from pilote left join vol on pilote.pil# = vol.pilote where villearrivee = 'casa' Return end create function PiloteParis() Returns table as Return select pil# , nom from pilote left join vol on pilote.pil# = vol.pilote where villearrivee = 'casa;
Types de fonctions
Le type de fonction change selon son type de retour: Fonction scalaire: retourne une valeur scalaire
RETURNS return_data_type [ AS ] BEGIN function_body RETURN scalar_expression END [ ; ]
instruction SELECT.
Fonction en ligne
RETURNS TABLE [ AS ] RETURN [ ( ] select_stmt [ ) ] [ ; ]
Fonction multi-instructions
RETURNS @return_variable TABLE < table_type_definition > [ AS ] BEGIN function_body RETURN END [ ; ]
permet dexcuter un traitement sur un ensemble denregistrements. Les curseurs sont des outils trs puissants, mais aussi trs gourmands en ce qui concerne les ressources. Il est donc conseill de modifier des lignes de rsultat de manire traditionnelle, avec un simple UPDATE ou une autre instruction du DML, afin de consommer le moins de ressources possibles.
SQL dfini. select_statement : Instruction SELECT standard qui dfinit le jeu de rsultats du curseur.
Les curseurs
OPEN: Cette instruction permet de remplir le curseur
ligne du curseur et de valoriser les variables et leur contenu. @@FETCH_STATUS : cest une variable globale qui tablit un rapport d'tat de la dernire instruction FETCH: Si lexcution du FECTCH sest bien passe , la variable globale @@FETCH_STATUS est 0.
Les curseurs
Syntaxe:
FETCH (arguments) Nom_Curseur INTO Liste_Variable
Arguments: NEXT: Lit la ligne suivante. PRIOR: Lit la ligne prcdente. FIRST: Lit la premire ligne. LAST: Lit la dernire ligne. ABSOLUTE p: Lit la Pime ligne de lensemble. RELATIVE p: avance de p position (si n ngatif recule de p position) Liste_Variable: autant de variable que de colonne dans lordre SELECT
Les curseurs
CLOSE: Cette instruction permet la fermeture du
curseur et la libration de la place mmoire o il t contenu. Il est important de faire intervenir cette opration ds que possible dans le souci de librer les ressources.
Syntaxe:
CLOSE Nom_Curseur
Exemple
Soit la table avion:
forme suivante:
Marque : AIRBUS - Type: A Marque : Airbus - Type: civile Marque : Boeing - Type: civile Marque : F5 - Type: militaire Marque : TEST - Type: T
Declare @Marque varchar(20), @type varchar(20) DECLARE Avion_cursor CURSOR FOR SELECT distinct (marque), typeAvion FROM Avion OPEN Avion_cursor FETCH NEXT FROM Avion_cursor INTO @marque, @type While @@FETCH_STATUS=0 begin print 'Marque : ' + @Marque + ' - Type: ' + @type FETCH NEXT FROM Avion_cursor INTO @Marque, @type End CLOSE Avion_cursor DEALLOCATE Avion_cursor GO
Exemple
Afficher les marques des avions avec leur types sous le
forme suivante:
Marque : AIRBUS Type : -A - civile Marque : Boeing Type : - civile Marque : F5 Type : - militaire Marque : TEST Type : -T
Declare @Marque varchar(20), @type varchar(20) DECLARE Avion_cursor CURSOR FOR SELECT distinct (marque) FROM Avion OPEN Avion_cursor FETCH NEXT FROM Avion_cursor INTO @marque While @@FETCH_STATUS=0 begin print 'Marque : ' + @Marque print ' Type :' DECLARE Type_cursor CURSOR FOR SELECT DISTINCT typeAvion From Avion where marque = @marque OPEN Type_cursor FETCH NEXT FROM Type_cursor INTO @type while @@fetch_status=0 begin print ' - ' + @type FETCH NEXT FROM Type_cursor INTO @type end CLOSE type_cursor DEALLOCATE type_cursor FETCH NEXT FROM Avion_cursor INTO @Marque End CLOSE Avion_cursor DEALLOCATE Avion_cursor