Je viens de télécharger et d'installer la toute dernière mouture de ASE.

Cette version comporte de nombreux changements attendus depuis longtemps, dont voici les principaux:

1. Fonctions statistiques (deviation standard, variance, etc),

2. Fonctions T-SQL appelable en ligne,

3. Trigger "instead of" applicable sur des vues,

4. Archive database (ouverture d'un dump en lecture directe, déjà dispo en 12.5.4).

Les exemple ci-dessous ont été "piqué" dans la doc ASE 15.0.2 (Nouvelle Fonctionalité) - je n'ai pas encore fait de tests exhaustifs de ces fonctions.

Les fonctions en T-SQL s'utilisent comme ceci:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
create function BONUS(@salary int, @grade int, @dept_id int)
returns int
as
begin
   declare @bonus int
   declare @cat int
   set @bonus = 0
   select @cat = dept_cat from department where dept_id = @dept_id
   if (@cat < 10)
   begin
       set @bonus = @salary *15/100
   end
   else
   begin
      set @bonus = @salary * 10/100
   end
 
   return @bonus
end
que l'on peut appeler directement dans une requête:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
select emp_name, BONUS(salary, grade, dept_id)
  from emp_data
where some_condition...
ce qui n'était pas faisable avec une proc stockée.

Le trigger "instead of" permet de faire une exploitation plus poussé des vues, comme par exemple:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 
CREATE TABLE EmployeeWest (
   empid int primary key,
   empname varchar(30),
   empdob datetime,
   region char(5) constraint region_chk check (region='West'))
 
CREATE TABLE EmployeeEast (
   empid int primary key,
   empname varchar(30),
   empdob datetime,
   region char(5) constraint region_chk check (region='East'))
 
CREATE VIEW Employees as
   SELECT * FROM EmployeeEast
UNION ALL
   SELECT * FROM EmployeeWest
 
CREATE TRIGGER EmployeesInsertTrig on Employees
INSTEAD OF INSERT AS
BEGIN
   INSERT INTO EmployeeEast SELECT * FROM inserted
      where region = "East"
 
   INSERT INTO EmployeeWest SELECT * FROM inserted
      where region = "West"
END
 
-- Ceci va inserer les données dans EmployeeEast:
INSERT INTO Employees
values (10, 'Jane Doe', '11/11/1967', 'East')
-- Et ceci dans EmployeeWest
INSERT INTO Employees
values (11, 'John Smith', '01/12/1977', 'West')
Il y a évidemment aussi de nombreuses autres améliorations, en particulier au niveau de l'optimiseur.

En attendant la 15.1 qui elle aura la fonctionalité "shared disk cluster" (instances ASE multiples s'appuyants sur les mêmes disques physiques).

Michael