blackfish sql - embarcadero websitedocs.embarcadero.com/products/rad_studio/delphiandcpp... ·...

149
Blackfish SQL Copyright© 2008 Embarcadero Technologies, Inc. Tous droits réservés.

Upload: others

Post on 25-Jun-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Blackfish SQL

Copyright© 2008 Embarcadero Technologies, Inc. Tous droits réservés.

Page 2: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier
Page 3: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Sommaire

Préface 1

Présentation 3

Architecture du système 7

Etablissement des connexions 25

Administration de Blackfish SQL 33

Utilisation de la sécurité de Blackfish SQL 37

Utilisation des procédures stockées et des fonctions définies par l'utilisateur

43

Utilisation des déclencheurs dans les tables Blackfish SQL 57

Référence des procédures stockées 61

Référence SQL 77

Optimisation des applications Blackfish SQL 127

Déploiement des applications de bases de données Blackfish SQL

135

Dépannage 139

Index a

Blackfish SQL

iii

Page 4: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier
Page 5: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

1 Préface

Cette préface décrit le manuel, donne la liste des ressources techniques disponibles et fournit les informations permettant decontacter CodeGear.

Public concerné

Ce document est destiné aux :

• Développeurs implémentant des applications de bases de données Blackfish SQL

• Administrateurs système responsables de l'installation, du déploiement et de la maintenance des bases de données Blackfish SQL

Les utilisateurs de Blackfish SQL pour Windows doivent connaître :

• La programmation Delphi, C++, C# ou VB.NET

• Les bases de dbExpress 4 ou d'ADO.NET 2.0

• Les bases de SQL

Les utilisateurs de Blackfish SQL pour Java doivent connaître :

• La programmation Java

• DataExpress

• JDBC

• SQL

Conventions de la documentation

Ce document utilise les conventions typographiques suivantes :

Police ou symbole Utiliser

espacement fixe Sorties de l'ordinateur, fichiers, répertoires, URL et exemples de code, comme les lignes decommandes, mots clés, noms de fonctions et exemples de code

espacement fixe,italique

Noms de paramètres et variables

Gras Eléments GUI, mises en valeur, sous-titres de sections

Italique Titres des manuels, nouveaux termes

1 Blackfish SQL

1

1

Page 6: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

police soulignée Hyperlien

Ressources techniques en ligne

Les informations d'ordre général se trouvent à l'adresse suivante : http://www.codegear.com/Blackfish SQL.

Les informations techniques et les contributions de la communauté se trouvent à l'adresse suivante :http://cdn.codegear.com/Blackfish SQL.

Pour échanger votre expérience avec d'autres utilisateurs de Blackfish, rejoignez le groupe de discussion :support.codegear.com/newsgroups/directory.

Support CodeGear

CodeGear offre plusieurs options de support de Blackfish SQL. Pour le support avant-vente, le support à l'installation et lesdifférentes options du support technique, visitez l'adresse suivante : http://support.codegear.com.

Quand vous serez prêt à déployer Blackfish SQL, il se peut que vous deviez acheter des licences de déploiementsupplémentaires. Pour acquérir licences et mises à jour, visitez la boutique en ligne de CodeGear, à l'adresse suivante :http://shop.codegear.com.

Ressources supplémentaires

Ressources techniques utiles :

JDBC

• JDBC™ API Documentation, à l'adresse java.sun.com

• JDBC API Tutorial and Reference, par Seth White et al., édité par Addison Wesley

SQL

• A Guide to The SQL Standard, par C. J. Date et Hugh Darwen, édité par Addison Wesley

JavaBeans DataExpress

• Référence de la bibliothèque de composants DataExpress dans l'aide Blackfish SQL pour Java

Voir aussi

Présentation ( see page 3)

Architecture du système ( see page 7)

Etablissement des connexions ( see page 25)

Administration de Blackfish SQL ( see page 33)

Utilisation de la sécurité de Blackfish SQL ( see page 37)

Utilisation des procédures stockées et des fonctions définies par l'utilisateur ( see page 43)

Utilisation des déclencheurs dans les tables Blackfish SQL ( see page 57)

Référence des procédures stockées ( see page 61)

Référence SQL ( see page 77)

Optimisation des applications Blackfish SQL ( see page 127)

Déploiement des applications de bases de données Blackfish SQL ( see page 135)

Dépannage ( see page 139)

Blackfish SQL 1

2

1

Page 7: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

2 Présentation

Ce chapitre décrit les fonctionnalités de Blackfish SQL.

• Blackfish SQL

• Blackfish SQL DataStore

• Compatibilité entre Windows et Java

• Connectivité de Blackfish SQL pour Java

• API pour Windows de Blackfish SQL

• Fonctions d'administration et utilitaires disponibles à partir de SQL

Blackfish SQL

Blackfish™ SQL est une base de données transactionnelle à performances élevées et à faible encombrement. Blackfish SQL aété initialement implémenté en tant que base de données entièrement Java sous le nom de JDataStore. Nous l'appelonsdésormais Blackfish SQL pour Java. Blackfish SQL a ensuite été porté de Java vers C#. L'implémentation C# s'appelle BlackfishSQL pour Windows.

Dans sa conception comme dans son implémentation, Blackfish SQL privilégie les performances, l'évolutivité, la facilité d'emploiet le strict respect des normes en vigueur. Voici quelques unes des fonctionnalités de Blackfish SQL :

• Compatibilité avec les standards de l'industrie :

• Niveau d'entrée SQL-92

• Stockage Unicode des données caractère

• Prise en charge des clés d'interclassement Unicode pour le tri et l'indexation

• Pilotes dbExpress 4 pour Delphi Win32 et C++

• Fournisseurs ADO.NET 2.0 pour .NET

• JDBC pour Java

• Composants d'accès aux données JavaBean pour Java

• Transactions distribuées XA/JTA pour Java

• Performances élevées et évolutivité pour les applications OLTP (traitement des transactions en ligne) et DSS (aide à la décision)

• Procédures stockées et déclencheurs Delphi, C# et VB.NET pour Windows

2 Blackfish SQL

3

2

Page 8: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

• Déclencheurs et procédures stockées Java

• Aucune administration, assemblage unique et déploiement par fichier jar unique

• Basculement automatique et sauvegarde incrémentielle des bases de données dans la version Java

Blackfish SQL DataStore

Blackfish SQL est le nom du produit, de ses outils et du format de fichier. Dans RAD Studio 2007, des assemblages incluentdes classes qui commencent par DataStore.

Compatibilité entre Windows et Java

Blackfish SQL pour Windows et Blackfish SQL pour Java sont compatibles, malgré quelques restrictions. Les formats de fichiersdes deux bases de données sont binairement compatibles. Les clients et serveurs de la base de données sontinterchangeables. Les clients Windows peuvent se connecter aux serveurs Java et les clients Java peuvent se connecter auxserveurs Windows. Cependant, comme l'implémentation de Blackfish SQL pour Windows est plus récente, certainesfonctionnalités de Blackfish SQL pour Java ne sont pas encore prises en charge par la version Windows.

Pour de plus amples informations sur la compatibilité de Blackfish SQL, voir Architecture du système.

Connectivité de Blackfish SQL pour Windows

Blackfish SQL pour Windows fournit les pilotes de bases de données suivants :

• DBXClient : Ce pilote de base de données dbExpress 4, 100% Object Pascal, permet aux applications C++ et Delphi Win32 de se connecter à un serveur distant Blackfish SQL pour Windows ou Blackfish SQL pour Java.

• Fournisseur ADO.NET 2.0 local : Ce pilote, en code géré à 100 %, permet aux applications .NET de se connecter à un serveur local Blackfish SQL pour Windows. Le pilote ADO.NET local s'exécute dans le même processus que le noyau de la base de données BlackFish SQL afin d'améliorer les performances.

• Fournisseur ADO.NET 2.0 distant : Ce pilote, en code géré à 100 %, permet aux applications .NET d'acquérir une connexion distante à un serveur Blackfish SQL pour Windows ou Blackfish SQL pour Java.

Pour les instructions d'utilisation de ces pilotes, voir Etablissement des connexions.

API pour Windows de Blackfish SQL

L'API de Blackfish SQL peut être utilisée dans les programmes Delphi et C++ avec le pilote DBXClient DBX4. Les applications.NET peuvent utiliser l'API avec le fournisseur ADO.NET. Dans RAD Studio, l'API se trouve dans les espaces de nommageBorland.Data.DataStore et Borland.Data.MetaData.

Les fonctionnalités administratives énumérées ci-après ne sont pas encore prises en charge dans DataExplorer pour BlackfishSQL pour Windows. Utilisez les commandes SQL ou Blackfish SQL intégrées aux procédures stockées de DB_ADMIN poureffectuer ces tâches.

• Création/modification de propriétés inline autoincrement et max pour les colonnes

• Création d'index secondaires

• Création, modification et suppression d'utilisateurs et de rôles

• Création, modification et suppression de miroirs de bases de données

• Chiffrement de la base de données

• Sauvegarde des bases de données

Fonctions d'administration et utilitaires disponibles à partir de SQL

Deux classes sont disponibles, DB_ADMIN et DB_UTIL. Leurs méthodes peuvent être appelées depuis SQL par l'instruction

Blackfish SQL 2

4

2

Page 9: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

CALL. Elles peuvent être appelées sans que soit créé un alias METHOD car le dialecte Blackfish SQL reconnaît les méthodesde DB_ADMIN comme des méthodes intégrées.

Classe DB_ADMIN

DB_ADMIN est un groupe de procédures stockées permettant d'effectuer diverses tâches d'administration sur la base dedonnées. Parmi ces fonctionnalités, citons :

• Configuration du basculement automatique et de la sauvegarde incrémentielle

• Affichage et modification des configurations des bases de données

• Sauvegarde des bases de données (explicite)

• Chiffrement des bases de données

• Gestion des miroirs

Pour de plus amples informations, voir la Référence des procédures stockées.

Classe DB_UTIL

DB_UTIL est un ensemble de procédures stockées SQL opérant sur les numériques, les chaînes, les dates et les heuresstockés dans les tables de la base de données. Ces procédures comprennent des fonctions telles que :

• Fonctions mathématiques, notamment trigonométriques, arithmétiques et aléatoires

• Fonctions de manipulation des chaînes

• Fonctions date et heure

Pour de plus amples informations, voir la Référence des procédures stockées.

ADO.NET

Blackfish SQL inclut une implémentation d'ADO.NET. Cela est comparable au Client AdoDbx, qui est également uneimplémentation d'ADO.NET.

• DataStoreCommand : Fournit l'exécution des instructions SQL et celle des procédures stockées.

• DataStoreCommandBuilder : Génère des commandes sur une seule table pour résoudre les modifications apportées à un DataSet avec sa base de données sous-jacente.

• DataStoreConnection : Fournit la connexion à une base de données.

• DataStoreConnectionPool : Fournit l'accès à un pool de connexions.

• DataStoreDataAdapter : Remplit un DataSet et met à jour une base de données.

• DataStoreDataReader : Donne l'accès à une table résultat depuis un serveur de base de données.

• DataStoreDataSourceEnumerator : Fournit un énumérateur permettant de trouver toutes les sources de données sur un réseau local.

• DataStoreParameter : Spécifie un paramètre de DataStoreCommand.

• DataStoreParameterCollection : Collection de paramètres de DataStoreCommand.

• DataStoreProviderFactory : Classe de base pour l'implémentation des classes de sources de données d'un fournisseur.

• DataStoreRowUpdatedEventArgs : Contient les données pour l'événement RowUpdated de DataStoreDataAdapter.

• DataStoreRowUpdatingEventArgs : Contient les données pour l'événement RowUpdating de DataStoreDataAdapter.

• DataStoreTransaction : Fournit une transaction.

Voir aussi

Préface ( see page 1)

Architecture du système ( see page 7)

2 Blackfish SQL

5

2

Page 10: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Etablissement des connexions ( see page 25)

Administration de Blackfish SQL ( see page 33)

Utilisation de la sécurité de Blackfish SQL ( see page 37)

Utilisation des procédures stockées et des fonctions définies par l'utilisateur ( see page 43)

Utilisation des déclencheurs dans les tables Blackfish SQL ( see page 57)

Référence des procédures stockées ( see page 61)

Référence SQL ( see page 77)

Optimisation des applications Blackfish SQL ( see page 127)

Déploiement des applications de bases de données Blackfish SQL ( see page 135)

Dépannage ( see page 139)

Blackfish SQL 2

6

2

Page 11: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

3 Architecture du système

Ce chapitre présente l'architecture du système Blackfish SQL.

• Compatibilité

• Connectivité Windows

• Connectivité Java

• Différences entre le pilote local et le pilote distant

• Fichiers de la base de données

• Système de fichiers de la base de données

• Gestion des transactions

• Haute disponibilité

• Réplication hétérogène en utilisant DataExpress

Compatibilité Blackfish SQL

Blackfish SQL pour Windows et Blackfish SQL pour Java sont compatibles dans les domaines suivants :

• Les formats de fichiers des deux bases de données sont binairement compatibles

• Les clients et les serveurs des bases de données sont interchangeables

• Les clients Windows peuvent se connecter aux serveurs Java et les clients Java peuvent se connecter aux serveurs Windows.

La compatibilité est restreinte dans les domaines suivants :

• Le type Object utilise une sérialisation spécifique à la plate-forme ; les données ne peuvent donc pas être partagées entre deux clients différents :

• Un pilote ADO ne peut pas lire un objet sérialisé Java.

• Un pilote Java ne peut pas lire un objet sérialisé .NET.

• Un pilote DBxClient ne peut pas lire les objets sérialisés Java et .NET.

• L'échelle maximale d'un décimal est différente en Java et sur .NET.

• Dans Blackfish SQL pour Java, le type Timestamp utilise deux chiffres de plus dans sa partie fractionnaire.

Les fonctionnalités suivantes de Blackfish SQL pour Java ne sont pas encore prises en charge par la version Windows :

3 Blackfish SQL

7

3

Page 12: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

• Interpréteur de la ligne de commandes SQL, ISQL

• Fonctionnalités Haute disponibilité, notamment la sauvegarde incrémentielle et le basculement automatique

• Utilisation d'outils graphiques pour certaines fonctions administratives

• Accès aux flux de fichiers et aux flux d'objets

• Suivi et résolution au niveau ligne des opérations d'insertion, de mise à jour et de suppression

• Accès au répertoire du système de fichiers Blackfish SQL

Connectivité de Blackfish SQL pour Windows

Les applications Windows peuvent utiliser une ou plusieurs des solutions de connectivité suivantes pour accéder par programmeà une base de données Blackfish SQL :

• DBXClient DBXClient est un pilote de base de données dbExpress 4, 100% Object Pascal, qui permet aux applications Delphi Win32 et C++ de se connecter à un serveur Blackfish SQL pour Windows ou Blackfish SQL pour Java.

• ADO.NET ADO.NET est le standard Microsoft de connectivité aux bases de données sur la plate-forme .NET. Blackfish SQL pour Windows propose les fournisseurs ADO.NET suivants :

• Fournisseur ADO.NET 2.0 local : Ce pilote, en code géré à 100 %, permet aux applications .NET de se connecter à un serveur local Blackfish SQL. Le pilote ADO.NET local s'exécute dans le même processus que le noyau de la base de données BlackFish SQL afin d'améliorer les performances.

• Fournisseur ADO.NET 2.0 distant : Ce pilote, en code géré à 100 %, permet aux applications .NET d'acquérir une connexion distante à un serveur Blackfish SQL pour Windows ou Blackfish SQL pour Java.

Pour avoir des instructions et des exemples de code sur l'utilisation de ces pilotes, reportez-vous à Etablissement desconnexions.

Connectivité de Blackfish SQL pour Java

Les applications Java peuvent utiliser une ou plusieurs des solutions de connectivité suivantes pour accéder par programme àune base de données Blackfish SQL :

• Pilotes JDBC de type 4 JDBC est l'interface standard, du niveau des appels SQL, pour les applications Java. Blackfish SQL pour Java fournit les pilotes JDBC suivants :

• Pilote JDBC local : Ce pilote, en code géré à 100 %, permet aux applications Java de se connecter à un serveur local Blackfish SQL. Le pilote JDBC local s'exécute dans le même processus que le noyau de la base de données BlackFish SQL afin d'améliorer les performances.

• Pilote JDBC distant : Ce pilote, en code géré à 100 %, permet aux applications Java d'acquérir une connexion distante à un serveur Blackfish SQL pour Windows ou Blackfish SQL pour Java.

• Passerelle ODBC-JDBC Fournie par EasySoft Limited, cette passerelle est une interface standard du niveau des appels SQL. La passerelle EasySoft ODBC-JDBC permet aux applications natives d'accéder aux bases de données Blackfish SQL.

• JavaBeans DataExpress Les JavaBeans DataExpress assurent des fonctionnalités que la norme JDBC ne prend pas en charge. Pour de plus amples informations, voir JavaBeans DataExpress.

Pour avoir des instructions et des exemples de code sur l'utilisation de ces pilotes, reportez-vous à Etablissement desconnexions.

JavaBeans DataExpress

REMARQUE : Cette fonctionnalité n'est disponible qu'avec Blackfish SQL pour Java.

DataExpress est un ensemble de composants d'exécution JavaBean qui couvrent les fonctionnalités non assurées par le JDBCstandard. JavaBean est une architecture de composants pour Java respectant les normes en vigueur. La norme JavaBeanspécifie un grand nombre des aspects importants des composants nécessaires aux environnements de développement RAD.Les composants JavaBean peuvent être créés dans un concepteur visuel et ensuite personnalisés grâce aux propriétés, auxméthodes et aux événements qu'ils exposent.

DataExpress est inclus dans la palette de composants du Concepteur visuel JBuilder de CodeGear. Pour obtenir des

Blackfish SQL 3

8

3

Page 13: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

informations sur l'utilisation de DataExpress dans JBuilder, reportez-vous à l'aide JBuilder.

Puisque DataExpress est un ensemble de composants d'exécution, vous n'avez pas besoin de JBuilder pour développer etdéployer les applications utilisant DataExpress.

La plupart des composants JavaBean DataExpress sont ceux nécessaires pour construire des applications de bases dedonnées côté client comme côté serveur. Les applications côté client nécessitent une liaison aux données de grande qualitéavec des composants visuels, tels que les contrôles grille, et demandent la prise en charge de la lecture et de l'écriture dedonnées dans une base de données.

Les applications côté serveur ont besoin de composants d'accès aux données, avec possibilité de lecture et d'écriture dans unebase de données, mais la présentation est généralement assurée par un système de génération de pages Web, JSP (JavaServer Pages) par exemple. Même si DataExpress prend complètement en charge la liaison aux données côté client avec desbibliothèques de composants visuels comme dbSwing et JBCL, DataExpress, de par sa conception même, sépare laprésentation de la couche d'accès aux données. De cette façon, il est possible d'utiliser des composants DataExpress commecouche d'accès aux données pour d'autres paradigmes de présentation, tels que la méthode jsp/servlet utilisée par latechnologie InternetBeans Express de JBuilder.

Dans une architecture DataExpress, une interface de stockage intégrable met en cache les données lues depuis une source.Actuellement, il n'existe que deux implémentations de cette interface MemoryStore (par défaut) et DataStore. Il suffit dedéfinir deux propriétés dans un composant JavaBean StorageDataSet pour avoir la possibilité de naviguer directement dansune table Blackfish SQL et de la modifier avec un JavaBean StorageDataSet. Définir la propriété DataSet d'un contrôle grilledbSwing donne la possibilité de consulter, interroger et modifier directement et rapidement tout le contenu de tablesvolumineuses. On obtient ainsi une couche d'accès de niveau ISAM aux données de tables Blackfish SQL.

Automatisation des fonctions d'administration avec des JavaBeans DataExpress

De nombreux composants DataExpress peuvent automatiser les tâches d'administration. Les composants habituellement utiliséssont :

Composants DataExpress d'administration

Tâche Composant

Démarrage et arrêt d'un serveur personnalisé com.borland.datastore.jdbc.DataStoreServer

Sauvegarde, restauration et compactage des bases dedonnées

com.borland.datastore.DataStoreConnection.copyStreams()

Administration de la sécurité com.borland.datastore.DataStoreConnection

Gestion des transactions com.borland.datastore.TxManager com.borland.datastore.DataStore

Code source JavaBean DataExpress

JBuilder inclut un fichier .jar en code source contenant une grande partie des composants JavaBean DataExpress. Grâce àlui, vous pourrez déboguer plus facilement vos applications et mieux appréhender les composants JavaBean DataExpress.

Différences entre le pilote local et le pilote distant

La principale différence dans l'utilisation d'un pilote local ou distant avec Blackfish SQL est la suivante :

• Pilote local : Le moteur de base de données Blackfish SQL s'exécute dans le même processus que l'application.

• Pilote distant : Le moteur de base de données Blackfish SQL s'exécute soit dans le même processus soit dans un autre processus que l'application.

3 Blackfish SQL

9

3

Page 14: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Avantages de l'utilisation d'un pilote local pour accéder à une base de données

Le pilote Blackfish SQL local offre les avantages suivants :

• Interface rapide vers la base de données Les appels au pilote se font directement dans le noyau de la base de données sur la même pile d'appels. Il n'y a pas d'appel à des procédures distantes qui se trouveraient sur un serveur de base de données exécuté dans un autre processus.

• Facilité d'intégration dans une application Il est inutile de configurer et de démarrer le serveur de base de données. Le code exécutable pour le noyau de la base de données, le pilote de la base de données et l'application s'exécutent dans le même processus.

Avantages de l'utilisation d'un pilote distant pour accéder à une base de données

Un pilote Blackfish SQL distant permet d'exécuter Blackfish SQL dans un processus de serveur séparé. Cependant, il estnécessaire de démarrer le processus du serveur Blackfish SQL pour que l'application utilise un pilote distant. Exécuter le noyaude la base de données Blackfish SQL dans un processus de serveur séparé offre les avantages suivants :

• Accès de plusieurs processus à la base de données Si plusieurs processus issus d'un ou de plusieurs ordinateurs doivent accéder à une base de données Blackfish SQL unique, un serveur Blackfish SQL doit être démarré et les pilotes distants doivent être utilisés par l'application.

• Amélioration des performances par l'utilisation de plusieurs ordinateurs Si votre serveur d'application ou votre serveur Web consomme beaucoup de ressources mémoire ou de CPU, l'exécution du serveur Blackfish SQL sur un ordinateur séparé améliore souvent les performances.

• Amélioration de la tolérance aux pannes Les applications qui utilisent une connexion distante sont habituellement exécutées dans un processus séparé. Les applications errantes peuvent être arrêtées sans obligation d'arrêter le serveur de la base de données.

Avantages de l'utilisation conjointe d'un pilote local et d'un pilote distant pour accéder à une base de données

L'utilisation conjointe du pilote local et du pilote distant pour accéder à la même base de données peut donner accès au meilleurdes deux mondes. Un seul processus du système d'exploitation suffit à garder ouvert un fichier de la base de données BlackfishSQL. Si vous vous connectez en utilisant le pilote local, le processus qui l'utilise maintient ouvert le fichier de la base dedonnées. Si c'est le pilote distant qui établit la connexion, c'est le processus du serveur Blackfish SQL qui maintient ouvert lefichier de la base de données.

Avec le pilote local, le fichier de la base de données reste ouvert dans le même processus, ce qui empêche les connexionsdepuis le pilote distant. Cependant, si le processus utilisant le pilote local démarre également un serveur Blackfish SQL dans lemême processus, les autres processus utilisant le pilote distant ont accès à la même base de données que le pilote local.

Pour démarrer le serveur Blackfish SQL dans une application, une seule ligne suffit dans le code Java ; elle instancie uncomposant DataStoreServer et en exécute la méthode start. Le DataStoreServer est exécuté dans un thread distinct. Iltraite les demandes de connexion issues des processus utilisant le pilote distant pour accéder à une base de données BlackfishSQL installée sur l'ordinateur ayant démarré le DataStoreServer.

En outre, l'application ayant lancé le DataStoreServer peut utiliser le pilote local pour accélérer les appels du pilote duprocessus dans le moteur de base de données Blackfish SQL.

Fichiers des bases de données Blackfish SQL

Les fichiers suivants sont créés et utilisés par Blackfish SQL :

• nom-fichier.jds: fichier unique où sont stockés tous les objets de la base de données.

• nom-base-de-données_LOGA_*: fichiers historiques de transactions. Si le fichier de la base est déplacé, les fichiers historiques doivent l'être également.

Blackfish SQL 3

10

3

Page 15: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

• nom-base-de-données_LOGA_ANCHOR: stocke de manière redondante les informations de configuration des fichiers historiques.

• nom-base-de-données_STATUS*: fichiers historiques créés si l'historique des états a été activé pour la base de données.

Une base de données Blackfish SQL peut être utilisée même en l'absence des fichiers historiques "anchor" ou "status".

Une base de données non transactionnelle (en lecture seule) n'a besoin que du fichier .jds.

Les spécifications de volume des fichiers des bases de données Blackfish SQL sont les suivants :

Volume des fichiers des bases de données Blackfish SQL

Spécification Valeur

Taille de bloc minimale : 1 Ko

Taille de bloc maximale : 32 Ko

Taille de bloc par défaut 4 Ko

Taille maximale d'un fichier de base de donnéesBlackfish SQL

2 milliards de blocs. Pour la taille de bloc par défaut, celacorrespond à un maximum de 8 796 093 022 208 octets (8 To).

Nombre maximal de lignes par flux de table 281,474,976,710,656

Longueur de ligne maximale 1/3 de la taille du bloc. Chaînes longues, objets et flux d'entréessont stockés en tant que blobs au lieu d'occuper de la place sur laligne.

Taille maximale des blobs 2 Go chacun

Taille maximale des flux de fichiers 2 Go chacun

Système de fichiers des bases de données Blackfish SQL

Un fichier de base de données Blackfish SQL peut contenir les types de flux de données suivants :

• Flux de tables : Ce sont les tables de base de données habituellement créées en utilisant SQL. A un flux de table peuvent être associés des index secondaires et des blobs stockés.

• Flux de fichiers : Il existe deux types de flux de fichiers :

• Les fichiers ordinaires créés avec DataStoreConnection.createFileStream().

• Les objets Java sérialisés, stockés sous forme de flux de fichiers.

Tous les types de flux peuvent coexister dans une même base de données Blackfish SQL.

L'organisation des flux est celle d'un répertoire dans un système de fichiers. Grâce à cette possibilité de stocker tables et fichiersordinaires dans le même système de fichiers, toutes les données d'une application sont regroupées dans un même systèmeportable et transactionnel. Les bases de données Blackfish SQL peuvent également être chiffrées et protégées par mot depasse.

Les spécifications du système de fichiers d'une base de données Blackfish SQL sont les suivants :

Spécifications du système de fichiers des bases de données Blackfish SQL

Spécification Valeur

Caractère de séparation desrépertoires dans les nomsde flux :

/

3 Blackfish SQL

11

3

Page 16: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Longueur maximale d'unnom de flux  

192 octets

• Meilleur cas (tous les jeux de caractères sur un octet) : 192 caractères

• Pire des cas (tous les jeux de caractères sur deux octets) : 95 caractères (perte d'un octet pour indiquer le DBCS)

Noms réservés Les noms de flux commençant par SYS sont réservés. Blackfish SQL utilise les tables systèmesuivantes :

• SYS/Connections

• SYS/Queries

• SYS/Users

Flux spécifiques à Blackfish SQL pour Java

Actuellement, tous les flux de fichiers et certains flux de tables ne sont accessibles que depuis les applications Java.

Définir la propriété resolvable de la table permet de garder trace de toutes les insertions, mises à jour et suppressions luiayant été apportées. Avec ce suivi des modifications, les composants DataExpress peuvent synchroniser les modifications entreune table répliquée et la base de données dont elle provient.

Les flux de fichiers sont des fichiers à accès direct. Les flux de fichiers peuvent être divisés en deux catégories différentes :

• Les fichiers ordinaires créés avec DataStoreConnection.createFileStream(). Vous pouvez écrire, lire et effectuer des recherches dans ces flux.

• Les objets Java sérialisés, stockés sous forme de flux de fichiers : Vous pouvez écrire, lire et effectuer des recherches dans ces flux.

Chaque flux est identifié par un nom, distinguant les majuscules des minuscules et désigné dans l'API comme étant unstoreName. Ce nom possède, au plus, 192 octets. Il est stocké avec d'autres informations sur le flux dans le répertoire internede la base de données Blackfish SQL. La barre oblique (/) est utilisée comme séparateur de répertoires dans le nom, pourreprésenter une hiérarchie. JdsExplorer utilise cette structure pour afficher le contenu du répertoire sous forme d'arborescence.

Avantages de l'utilisation d'un système de fichiers Blackfish SQL

Pour un simple stockage persistant de fichiers et d'objets ordinaires, l'utilisation d'un système de fichiers Blackfish SQL présenteun certain nombre d'avantages sur l'utilisation des classes JDK du package java.io :

• Il est plus simple car une seule classe est nécessaire au lieu de quatre (FileOutputStream, ObjectOutputStream, FileInputStream, ObjectInputStream). 

• Tous les fichiers et les objets de votre application peuvent être conservés dans un seul fichier et vous pouvez y accéder par un nom logique, au lieu de mettre en flux tous vos objets dans le même fichier.

• Votre application utilise moins d'espace de stockage à cause de la façon dont sont alloués les clusters disque sur certains systèmes d'exploitation. La taille par défaut d'un bloc de fichier de base de données Blackfish SQL est petite (4 Ko).

• Comme vous n'êtes plus à la merci du système de fichiers hôte, votre application peut être plus facilement portée sur d'autres systèmes. Par exemple, les différents systèmes d'exploitation n'autorisent pas dans les noms les mêmes caractères. Certains systèmes distinguent les majuscules des minuscules, d'autres non. Dans le système de fichiers Blackfish SQL, les règles s'appliquant aux noms sont constantes sur toutes les plates-formes.

• Blackfish SQL fournit un système de fichiers transactionnel, qui peut être chiffré et protégé par mot de passe.

Contenu du répertoire Blackfish SQL

Remarque : Actuellement, le répertoire de la base de données Blackfish SQL ne peut être accédé que depuis les applications

Blackfish SQL 3

12

3

Page 17: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Java. Heureusement, la majorité des applications n'ont pas besoin d'accéder directement à ce répertoire.

L'arborescence de JdsExplorer montre une vue hiérarchisée du répertoire Blackfish SQL. Le répertoire Blackfish SQL peutégalement être ouvert par programme en utilisant le composant DataExpress StorageDataSet. Cela montre une vue tabulairede tous les flux stockés dans le système de fichiers Blackfish SQL. Voici la structure de la table d'un répertoire :

Colonnes de la table d'un répertoire Blackfish SQL

# Nom Constante Type Contenu

1 State DIR_STATE short Si le flux est actif ou supprimé

2 DeleteTime DIR_DEL_TIME long Si supprimé, quand ; sinon zéro

3 StoreName DIR_STORE_NAME String Nom de stockage

4 Type DIR_TYPE short Champs de bits indiquant le type de flux

5 Id DIR_ID int Numéro ID unique

6 Propriétés DIR_PROPERTIES String Propriétés et événements d'un flux DataSet

7 ModTime DIR_MOD_TIME long Dernière fois que le flux a été modifié

8 Length DIR_LENGTH long Longueur du flux, en octets

9 BlobLength DIR_BLOB_LENGTH long Longueur d'un blob dans un flux de table, en octets

Vous pouvez faire référence à une colonne par son nom ou par son numéro. Il existe des constantes, définies sous forme devariables de la classe DataStore, pour chacun des noms de colonne. Le meilleur moyen de référencer ces colonnes estd'utiliser ces constantes. Les constantes sont vérifiées au moment de la compilation ; leur utilisation garantit donc une référenceà une colonne valide. Il existe des constantes pour les différentes valeurs de la colonne State ; leurs noms respectifs seterminent par _STATE. Il existe aussi des constantes pour les différentes valeurs et les différents masques de bits de la colonneType ; leurs noms respectifs se terminent par _STREAM. Pour la liste de ces constantes, voir la classe DataStore dans l'aideen ligne.

Détails des flux

Les colonnes affectées aux temps dans le répertoire Blackfish SQL sont en UTC (temps universel coordonné).

Comme dans la plupart des systèmes de fichiers, lorsque vous supprimez un flux dans Blackfish SQL, l'espace occupé par leflux est marqué comme disponible mais son contenu et l'entrée de répertoire qui pointe sur lui ne sont pas immédiatementréutilisés par de nouvelles allocations. Cela signifie qu'il est parfois possible de récupérer un flux supprimé s'il n'a pas été écrasé.

Pour de plus amples informations sur la suppression et la récupération des flux, voir Suppression de flux, Comment BlackfishSQL réutilise les blocs et Récupération de flux.

La colonne Type indique si un flux s'applique à un fichier ou à une table, mais il existe de nombreux sous-types de flux de tablesinternes (par exemple, les index et les agrégats). Ces flux internes sont marqués avec le bit HIDDEN_STREAM afin d'indiquerqu'ils ne doivent pas être affichés. Bien sûr, lorsque vous consultez le répertoire, vous pouvez décider que ces flux soientcachés ou visibles.

Ces flux internes ont le même StoreName que le flux de table auquel ils sont associés. Cela signifie que le StoreName seul nepermet pas toujours d'identifier un flux. Certains types de flux internes peuvent avoir plusieurs instances. L'ID de chaque flux esttoujours unique et le StoreName est suffisamment unique pour servir de paramètre storeName au niveau de l'API. Parexemple, lorsque vous supprimez un flux de table, tous les flux ayant ce StoreName sont supprimés.

Ordre de tri du répertoire

La table du répertoire est triée sur les cinq premières colonnes. Grâce aux valeurs stockées dans la colonne State, les fluxactifs sont énumérés les premiers, dans l'ordre alphabétique de leurs noms. Ils sont suivis des flux supprimés, classés par datede suppression (de la plus ancienne à la plus récente).

3 Blackfish SQL

13

3

Page 18: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

REMARQUE : Vous ne pouvez pas utiliser un DataSetView pour obtenir un autre ordre de tri.

Allocation de mémoire de stockage dans le système de fichiers Blackfish SQL

Le contenu d'une base de données est stocké dans un seul fichier. Si la base de données prend en charge les transactions, desfichiers supplémentaires conservent l'historique de ces transactions.

La propriété définissant la taille des blocs d'un fichier de base de données a une valeur par défaut de 4096 octets. Cette taille estl'unité utilisée pour toutes les allocations ultérieures effectuées dans la base de données. Elle détermine également la taille destockage maximale d'une base de données Blackfish SQL. La formule calculant la taille maximale du fichier de la base dedonnées est la suivante : <octets-par-bloc> * 2^31 Pour une taille de bloc de 4096 octets, cela correspond à 8,8 téraoctetsenviron.

Un fichier de base de données Blackfish SQL ne diminue pas automatiquement de taille s'il perd des données par suppressionou retrait. Cependant, les nouvelles allocations utilisent l'espace libéré par les suppressions. L'espace peut être libéré dans lesystème de fichiers de deux façons :

• Blocs supprimés En ce cas, un bloc entier de la liste des blocs supprimés est réalloué.

• Blocs partiellement remplis En ce cas, l'espace libéré ne peut être réutilisé que flux par flux. Par exemple, l'espace libre d'un bloc de la Table A ne peut être réutilisé que par l'allocation d'une nouvelle ligne dans la Table A. Dans la perspective des allocations, les tables, les index secondaires, les blobs et les fichiers sont tous des flux distincts.

En moyenne, les blocs partiellement alloués sont remplis à 50 pour cent, ou plus. Le système de fichiers prévoit des valeursélevées pour s'assurer que cela reste vrai pour tous les types de flux dans le système de fichiers Blackfish SQL. La seuleexception à cette règle se rencontre lorsque le nombre de blocs alloués à un flux est faible.

Il est possible de compacter un fichier de base de données Blackfish SQL pour retirer tout l'espace supprimé et défragmenter lesystème de fichiers, pour que les blocs d'un même flux utilisent des régions contiguës. Pour compacter une base de donnéesavec JdsExplorer, choisissez Outils > Compacter. Vous pouvez obtenir le même résultat par programme avec les méthodesDB_ADMIN.COPY_USERS et DB_ADMIN.COPY_STREAMS.

Suppression de flux

La suppression d'un flux n'écrase pas ou n'efface pas réellement le contenu du flux. Comme dans la plupart des systèmes defichiers, l'espace utilisé par le flux est marqué comme disponible, et l'entrée de répertoire pointant sur cet espace est marquéecomme supprimée. L'heure à laquelle le flux a été supprimé est enregistrée dans le répertoire. Au fil du temps, les nouvellesallocations de flux écrasent l'espace précédemment occupé par le flux supprimé, rendant irrécupérable le contenu des fluxsupprimés.

Vous pouvez utiliser JdsExplorer pour supprimer des flux. Vous pouvez aussi les supprimer par programme en utilisant laméthode DataStoreConnection.deleteStream() qui prend comme argument le nom du flux à supprimer.

Comment JDataStore réutilise les blocs

Les blocs du fichier de base de données Blackfish SQL précédemment occupés par les flux supprimés sont récupérés selon lesrègles suivantes :

• Blackfish SQL récupère toujours l'espace supprimé avant d'allouer un nouvel espace disque à ses blocs.

• Si la base de données est transactionnelle, la transaction qui a supprimé le flux doit être validée par commit avant que l'espace utilisé ne soit récupéré.

• Les flux supprimés les premiers (ceux ayant les heures de suppression les plus anciennes) sont récupérés les premiers.

• Pour les flux de tables, les flux de support (comme ceux des index et des agrégats) sont récupérés les premiers.

• L'espace est récupéré du début du flux à la fin du flux. Cela signifie que vous avez plus de chances de récupérer la fin d'un fichier ou d'une table que le début.

• La façon dont les données des tables sont stockées dans les blocs vous garantit de ne jamais perdre ni récupérer une ligne partielle d'un flux de table mais toujours des lignes entières.

Blackfish SQL 3

14

3

Page 19: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

• Lorsque tout l'espace d'un flux a été récupéré, l'entrée de répertoire correspondant au flux est automatiquement effacée, puisqu'il n'y a plus rien à restaurer.

Restauration de flux

Blackfish SQL autorise la récupération des flux supprimés si leur espace n'est pas déjà occupé par de nouvelles allocations,comme décrit dans la section précédente. Vous pouvez restaurer un flux soit en utilisant JdsExplorer, soit en appelant laméthode DataStoreConnection.undeleteStream().

Les flux de tables ayant plusieurs flux de même nom, le nom de flux seul n'est pas suffisant pour tenter de récupérer un flux parprogramme. Vous devez utiliser une ligne du répertoire Blackfish SQL. La ligne contient suffisamment d'informations pouridentifier de manière unique un flux particulier.

La méthode DataStoreConnection.undeleteStream() accepte cette ligne comme paramètre. Vous pouvez transmettrel'ensemble de données du répertoire lui-même. La ligne en cours dans l'ensemble de données du répertoire sera utilisée commeligne à récupérer.

Vous pouvez créer un flux portant le nom d'un flux supprimé, mais vous ne pourrez pas récupérer ce flux, son nom étant encours d'utilisation par un flux actif.

Gestion des transactions

Le cycle de vie d'une transaction commence par une opération de lecture ou d'écriture via une connexion. Blackfish SQLverrouille les flux pour contrôler l'accès aux ressources. Pour lire un flux ou modifier une partie d'un flux (un octet dans un fichier,une ligne dans une table, etc.), vous devez poser un verrou sur ce flux. Si une connexion pose un verrou sur un flux, ellemaintient le verrou jusqu'à ce que la transaction soit validée par un commit ou annulée par un rollback.

Dans les applications à une seule connexion, les transactions servent essentiellement à annuler les modifications et à permettreles récupérations après panne. Ou, vous pouvez rendre transactionnelle une base de données Blackfish SQL afin qu'elle soitaccessible via JDBC. Si vous voulez accéder à cette base de données Blackfish SQL via DataExpress, vous êtes concerné parles transactions.

Niveaux d'isolation des transactions

Blackfish SQL prend en charge les quatre niveaux d'isolation spécifiés par la norme ANSI/ISO SQL (SQL/92).

Le niveau d'isolation sérialisable entraîne l'isolation complète d'une transaction. Une application peut utiliser un niveau d'isolationplus faible pour améliorer les performances ou pour éviter les blocages du gestionnaire de verrouillage. Les niveaux d'isolationplus faibles sont susceptibles de provoquer une ou plusieurs des violations d'isolation suivantes :

• Lectures sales Une connexion est autorisée à lire des données non validées écrites par une autre connexion.

• Lectures non reproductibles Une connexion lit une ligne validée, une autre connexion change et valide cette ligne, la première connexion relit la ligne et obtient une valeur différente lors de cette la seconde lecture.

• Lectures fantôme Une connexion lit toutes les lignes satisfaisant une condition WHERE, une autre connexion ajoute une autre ligne satisfaisant aussi cette condition, et la première connexion voit la ligne qui n'existait pas auparavant, lorsqu'elle effectue une seconde lecture.

SQL-92 définit quatre niveaux d'isolation vis à vis du comportement autorisé à une transaction s'exécutant sous un certainniveau d'isolation.

Définitions des niveaux d'isolation SQL

Niveau d'isolation Lecture sale Lecture non reproductible

Lecture fantôme

Read uncommitted (lecture non validée) Possible Possible Possible

Read committed (lecture validée) Impossible Possible Possible

3 Blackfish SQL

15

3

Page 20: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Repeatable read (lecture reproductible) Impossible Impossible Possible

Serializable (sérialisable) Impossible Impossible Impossible

Choix du niveau d'isolation d'une connexion Blackfish SQL

Conseils pour choisir le niveau d'isolation d'une connexion :

Conseils sur les niveaux d'isolation

Niveau d'isolation

Description

ReadUncommitted

Ce niveau d'isolation est adapté aux applications mono-utilisateurs dont les états supportent l'incohérence parrapport aux transactions pour les vues des données. Il est particulièrement utile lors de la navigation dans lestables Blackfish SQL avec des composants dbSwing et le composant DataExpress DataSet. Ce niveaud'isolation minimise la surcharge système due aux verrous.

ReadCommitted

Ce niveau d'isolation est habituellement utilisé pour les applications à hautes performances. Il est idéal pour lesmodèles d'accès aux données où le contrôle de la simultanéité est de type optimiste. Dans ces modèles d'accèsaux données, les opérations de lecture sont très généralement traitées en premier. Dans certains cas, lesopérations de lecture sont, en fait, exécutées dans une transaction séparée des opérations d'écriture.

RepeatableRead

Ce niveau d'isolation fournit plus de protection pour les accès aux données cohérents par rapport auxtransactions, sans la simultanéité réduite qui est attachée à TRANSACTION_SERIALIZABLE. Mais, ce niveaud'isolation induit une augmentation de la charge de verrouillage car des verrous doivent être posés sur les ligneset maintenus pendant toute la durée de la transaction.

Serializable Ce niveau d'isolation fournit aux transactions une capacité complète de sérialisation, mais risque de réduire lasimultanéité et d'augmenter la probabilité d'apparition de verrous mortels. Bien qu'à ce niveau d'isolation, lesverrous sur les lignes soient toujours utilisables pour les opérations les plus communes, certaines actionspeuvent amener le gestionnaire de verrouillage Blackfish SQL à poser des verrous sur les tables.

Verrouillage Blackfish SQL

Les verrous utilisés par le gestionnaire de verrouillage Blackfish SQL sont les suivants :

Verrouillage Blackfish SQL

Verrou Description

Verroussursectionessentielle

Ce sont des verrous internes servant à protéger les structures internes des données. Les verrous sur sectionessentielle sont habituellement maintenus pendant une courte durée. Ils sont posés et libérés indépendamment dumoment de la validation de la transaction.

Verroussur ligne

Les verrous ligne servent à verrouiller une ligne dans une table. Ces verrous prennent en charge les modes deverrouillage partagé et exclusif. Les verrous ligne sont libérés lorsque la transaction est validée.

Verroussur table

Les verrous table servent à verrouiller une table entière. Ces verrous prennent en charge les modes de verrouillagepartagé et exclusif. Les verrous table sont libérés lorsque la transaction est validée.

Blackfish SQL 3

16

3

Page 21: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Verroussur tableDDL

Les verrous sur table DDL sont des verrous acquis lorsque sont créées, modifiées ou effacées les métadonnées dela base. Ces verrous prennent en charge les modes de verrouillage partagé et exclusif :.

• Les verrous DDL partagés sont maintenus par les transactions ayant des tables ouvertes. Les verrous DDL partagés sont maintenus jusqu'à la validation de la transaction ; la connexion ferme la table ainsi que toutes les instructions qui s'y réfèrent.

• Les verrous DDL exclusifs sont utilisés lorsqu'une table doit être abandonnée ou sa structure modifiée ; ils sont libérés lorsque la transaction est validée.

Contrôle du comportement de verrouillage dans Blackfish SQL

Vous pouvez spécifier les propriétés de connexion qui contrôlent le comportement de verrouillage ; ces propriétés distinguent lesmajuscules des minuscules. Les noms des propriétés sont :

Propriétés de connexion distinguant majuscules et minuscules affectées au contrôle du comportement de verrouillage

Propriété Comportement

tableLockTables Spécifie les tables pour lesquelles le verrouillage ligne doit être désactivé. Cela peut être une liste de tables,constituée des noms des tables séparés par un point-virgule, et distinguant les majuscules des minuscules.Définissez cette propriété par “*”.

maxRowLocks Spécifie le nombre maximal de verrous que peut poser une transaction sur les lignes d'une table avant depasser au verrouillage de toute la table. La valeur par défaut est 50.

lockWaitTime Spécifie le nombre maximal de millisecondes d'attente de la libération d'un verrou par une autre transaction.Lorsque ce délai est dépassé, l'exception appropriée est déclenchée.

readOnlyTxDelay Spécifie le nombre maximal de millisecondes d'attente avant le démarrage d'une nouvelle vue en lectureseule de la base de données. Pour de plus amples informations, voir transaction en lecture seule, à lasection Réglage des performances du contrôle des accès simultanés dans Blackfish SQL

Verrouillage et niveaux d'isolation dans Blackfish SQL

L'utilisation des verrous sur les tables et sur les lignes varie selon le niveau d'isolation. La propriété de connexiontableLockTables désactive le verrouillage de lignes et affecte tous les niveaux d'isolation. Les verrous sur section essentielleet sur table DDL sont appliqués de la même manière à tous les niveaux d'isolation.

Tous les niveaux d'isolation entraînent la pose d'au moins un verrou exclusif sur la ligne concernée par une opération de mise àjour, de suppression ou d'insertion. Dans certains scénarios de verrouillage, un verrou exclusif sur la table peut être utilisé à laplace.

Le comportement de verrouillage des lignes selon les niveaux d'isolation des connexions à Blackfish SQL est le suivant :

Utilisation des verrous et niveaux d'isolation

Niveau d'isolation de la connexion

Comportement de verrouillage des lignes

ReadUncommitted

Ce niveau ne pose pas de verrou ligne pour les opérations de lecture. Ignore également les verrous ligneexclusifs posés par les autres connexions ayant inséré ou mis à jour une ligne.

3 Blackfish SQL

17

3

Page 22: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

ReadCommitted

Ce niveau ne pose pas de verrou ligne pour les opérations de lecture. Une transaction utilisant ce niveaud'isolation bloquera à la lecture d'une ligne sur laquelle une autre transaction a posé un verrou exclusif à la suited'une opération d'insertion ou de mise à jour. Le déblocage s'effectue : lorsque la transaction en écriture estvalidée, lorsqu'un verrou mortel est détecté ou lorsque le délai lockTimeOut est expiré.

RepeatableRead

Ce niveau pose des verrous ligne partagés pour les opérations de lecture.

Serializable Ce niveau pose des verrous ligne partagés pour les requêtes qui sélectionnent une ligne en fonction d'unensemble unique de valeurs de colonnes, comme une clé primaire ou une colonne INTERNALROW. En SQL,c'est la clause WHERE qui détermine si des valeurs de colonnes uniques ont été sélectionnées. Des verrousligne exclusifs sont également utilisés pour les opérations d'insertion et pour les opérations de mise àjour/suppression des lignes identifiées par un ensemble unique de valeurs de colonnes. Les opérationssuivantes passent à un verrou table partagé :

• Les lectures non basées sur un ensemble unique de valeurs de colonnes

• Les lectures qui ne trouvent aucune ligne

• Les opérations d'insertion et de mise à jour effectuées sur une ligne non identifiée par une valeur unique

Remarquez que le passage des verrous ligne au verrou table se produit dans certaines situations pour Serializable commedécrit précédemment, mais qu'il intervient également pour tous les niveaux d'isolation lorsque la valeur de la propriétémaxRowLocks se trouve dépassée.

Modifications du contrôle des accès simultanés

Les fichiers des bases de données Blackfish SQL créées avec les versions précédentes du logiciel Blackfish SQL continuentd'utiliser le verrouillage des tables pour contrôler la simultanéité des accès. Il existe cependant quelques améliorations ducontrôle de la simultanéité des accès pour les fichiers des anciennes bases de données. Parmi lesquelles :

• Prise en charge des niveaux d'isolation des connexions Read Uncommitted et Serializable

• Verrous table partagés pour les opérations de lecture ; les versions précédentes du logiciel Blackfish SQL utilisaient des verrous table exclusifs pour les opérations de lecture et d'écriture.

Mise en pool des connexions à Blackfish SQL pour Windows

Dans une application qui ouvre et ferme de nombreuses connexions aux bases de données, il est plus efficace de garder lesobjets Connection inutilisés dans un pool pour les réutiliser plus tard. Cela économise le temps de création d'une connexionphysique à chaque fois.

Utilisation du pilote dbExpress DBXClient

Utilisez le pilote délégué TDBXPool pour prendre en charge la mise en pool des connexions DBXClient.

Utilisation des fournisseurs ADO.NET

Par défaut, les pilotes du client .NET implémentent un pool de connexions qui reste en vigueur en permanence. ChaqueConnectionString a son propre pool. Il existe des propriétés de connexion déterminant le nombre maximal de connexionsprésentes dans un pool, ainsi que d'autres attributs. Il existe aussi une propriété ConnectionPool qui donne accès à tous lespools de connexions actifs.

Mise en pool des connexions à Blackfish SQL pour Windows et support des transactions distribuées

Blackfish SQL fournit plusieurs composants permettant de gérer les DataSources JDBC, la mise en pool des connexions et lesupport des transactions distribuées (XA). Ces fonctionnalités nécessitent J2EE. Si vous utilisez une version du JRE antérieureà la version 1.4, téléchargez le fichier J2EE.jar depuis le site java.sun.com, et ajoutez-le à votre chemin de classes.

Blackfish SQL 3

18

3

Page 23: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Mise en pool des connexions à Blackfish SQL pour Java

L'objet JdbcConnectionPool supporte les transactions XA en pool. Cette fonctionnalité permet à Blackfish SQL de participeren tant que gestionnaire de ressources à une transaction distribuée. Blackfish SQL fournit le support XA par l'implémentationdes interfaces standard suivantes, décrites dans la spécification de l'API Java Transaction (JTA) :

• javax.sql.XAConnection

• javax.sql.XADataSource

• javax.transaction.xa.XAResource

Pour acquérir une connexion distribuée à un Blackfish SQL depuis un JdbcConnectionPool, vous appelezJdbcConnectionPool.getXAConnection(). La connexion renvoyée par cette méthode ne fonctionne qu'avec le piloteJDBC Blackfish SQL. Le support XA n'est utile qu'en combinaison avec un gestionnaire de transactions distribuées, comme celuifourni par Borland Enterprise Server.

Pour les opérations normales, toutes les transactions globales doivent être validées ou annulées avant que la connexionXAConnection associée ne soit fermée. Si une connexion participe à une transaction globale qui ne se trouve pas encore dansl'état "préparée" mais qui est dans l'état "démarrée avec succès" ou "suspendue", la transaction sera annulée.

Propriété JDBC étendue d'achèvement heuristique

Dans Blackfish SQL, la propriété JDBC étendue heuristicCompletion permet de contrôler le comportement lorsqu'une ouplusieurs bases de données tombent en panne au cours d'une validation en deux phases. Quand des transactions XA sontpréparées, mais pas terminées (aucune opération de validation ou de rollback n'a été effectuée), le comportement est déterminépar la valeur de cette propriété :

• commit provoque la validation heuristique de la transaction quand Blackfish SQL rouvre la base de données. Il s'agit de la valeur par défaut.

• rollback provoque l'annulation heuristique de la transaction quand Blackfish SQL rouvre la base de données.

• none provoque la conservation de l'état de la transaction quand Blackfish SQL rouvre la base de données. Quand cette option est utilisée, les verrous posés au moment où la transaction a été préparée sont réacquis et maintenus jusqu'à la validation ou l'annulation de la transaction par un gestionnaire de transactions conforme à JTA/JTS.

Les options heuristiques commit et rollback permettent une exécution plus efficace, car les verrous peuvent être libérés plustôt et une quantité d'informations moindre est écrite dans le fichier de l'historique des transactions.

Serveur Blackfish SQL Haute disponibilité

REMARQUE : Cette fonctionnalité n'est actuellement disponible qu'avec Blackfish SQL pour Java. Elle n'est actuellement pasdisponible avec Blackfish SQL pour Windows.

Pour n'importe quelle application de base de données, une des questions les plus importantes est d'éliminer les points dedéfaillance uniques. Le serveur Blackfish SQL fournit une grande variété de fonctionnalités empêchant la défaillance desapplications de bases de données en évitant les temps d'immobilisation et les pertes de données critiques. Le serveur Hautedisponibilité utilise les techniques de mise en miroir des bases de données pour garantir la disponibilité des données lors despannes logicielles ou matérielles et pour assurer les sauvegardes incrémentielles courantes. Alors qu'un système plus généralde réplication de la base de données pourrait produire une protection égale, l'approche par miroir est intéressante par sasimplicité, sa facilité d'utilisation et ses performances.

Un solution plus générale de réplication des données pourrait être employée pour résoudre nombre des problèmes résolus parle serveur Haute disponibilité. Même si une solution plus générale répondrait à une plus grande variété de besoins desynchronisation, elle impliquerait un coût plus élevé, en particulier une plus grande complexité et de moins bonnes performances.

Le moteur de base de données Blackfish SQL utilise les fichiers historiques des transactions pour maintenir les images desbases de données sous forme de miroirs en lecture seule. Ce sont les connexions TCP/IP servant pour l'accès général à la basequi sont utilisées pour synchroniser les bases mises en miroir.

3 Blackfish SQL

19

3

Page 24: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Types de miroirs

Les types de miroirs suivants peuvent être utilisés par une application :

• Primaire

• Lecture seule

• Répertoire

Miroir primaire

Le miroir primaire est le seul type de miroir pouvant accepter à la fois des opérations de lecture et d'écriture dans la base dedonnées. A tout moment, il ne peut exister qu'un seul miroir primaire.

Miroirs en lecture seule

Il peut exister un nombre quelconque de miroirs en lecture seule. Les connexions à ces bases de données ne peuvent servirqu'à des opérations de lecture. Les miroirs en lecture seule fournissent une vue cohérente par rapport aux transactions de labase de données en miroir primaire. Cependant, la base du miroir en lecture seule peut ne pas refléter les opérations d'écritureles plus récentes existant dans la base de données en miroir primaire. Les miroirs en lecture seule peuvent être synchronisésavec les modifications apportées au miroir primaire de manière instantanée, selon un calendrier pré-établi ou manuellement. Lasynchronisation instantanée est exigée pour le basculement automatique. Les synchronisations programmée et manuellepeuvent être utilisées pour la synchronisation ou la sauvegarde incrémentielle.

Miroirs répertoire

Les bases de données en miroir répertoire ne mettent en miroir que la table de configuration des miroirs et les tablesnécessaires à la définition de la sécurité. Elles ne mettent pas en miroir les véritables tables de l'application existant dans lemiroir primaire.

Il peut exister un nombre quelconque de miroirs répertoire. Les connexions à ces bases de données ne peuvent servir qu'à desopérations de lecture. Pour une base de données en miroir répertoire, les besoins de stockage sont très faibles puisqu'elle necontient que la table des miroirs et les tables de sécurité. Les miroirs répertoire redirigent les demandes de connexions pour lalecture seule vers les miroirs en lecture seule. Les demandes de connexions pour l'écriture sont redirigées vers le miroir primaire.

Moteur Blackfish SQL et basculement

Voici quelques unes des fonctionnalités de gestion du basculement du moteur Blackfish SQL :

• Enregistrements de l'historique des transactions

• Basculement automatique

• Basculement manuel

Enregistrements de l'historique des transactions

Blackfish SQL utilise les enregistrements de l'historique des transactions pour mettre à jour de manière incrémentielle les basesde données en miroir. Il transmet à haute vitesse aux miroirs les enregistrements de l'historique lors des opérations desynchronisation. Le mécanisme utilisé pour la récupération après panne et le rollback sert à appliquer ces modifications. Le codeexistant est utilisé pour toute la synchronisation. La prise en charge par Blackfish SQL des transactions en lecture seule fournitune vue cohérente par rapport aux transactions des données mises en miroir tandis que le miroir est synchronisé à partir dumiroir primaire par le contenu des transactions d'écriture les plus récentes.

Blackfish SQL 3

20

3

Page 25: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Basculement automatique

Lorsqu'un miroir primaire — configuré avec deux ou plusieurs miroirs de basculement automatique — est défaillant, un desmiroirs en lecture seule configuré pour le basculement automatique devient le miroir primaire. L'application peut être affectée del'une des manières suivantes :

• Si une application a déjà connecté le primaire avant la défaillance de celui-ci, toutes les opérations tentées sur le primaire défaillant provoqueront des erreurs SQLException ou IOException. L'application peut se transférer immédiatement elle-même sur le nouveau primaire en annulant la transaction par rollback. Cela ressemble à la façon dont est géré un verrou mortel sur la base de données dans les applications OLTP à forte concurrence d'accès.

• Si une application n'a jamais connecté le primaire avant la défaillance de celui-ci, sa tentative de connexion échoue. Les miroirs répertoire peuvent servir à rediriger automatiquement les nouvelles demandes de connexion vers le nouveau miroir primaire.

Basculement manuel

Contrairement au basculement automatique, le basculement manuel n'est exécuté qu'à la demande. N'importe quel miroir enlecture seule peut devenir miroir primaire. Cela s'avère utile lorsque la machine où s'exécute le serveur primaire doit être misehors ligne pour la maintenance du système.

Avantages d'un serveur Haute disponibilité

Le serveur Haute disponibilité de Blackfish SQL apporte de très nombreux bénéfices, dont :

• Pas de point de défaillance unique Comme plusieurs copies de la même base de données sont maintenues sur plusieurs ordinateurs, il n'est pas nécessaire de partager un périphérique de stockage. Le serveur Haute disponibilité maintient le plus haut niveau de disponibilité de la base de données sans point de défaillance unique et, avec un basculement et une récupération à haute vitesse, garantit la cohérence des données et l'intégrité des transactions.

• Protection complète des données et contre les catastrophes En maintenant des copies de la base de données sur plusieurs serveurs, le serveur Haute disponibilité garantit que celles-ci resteront intactes dans l'éventualité d'une défaillance des supports, d'une panne de serveur ou de tout autre catastrophe.

• Couche de transport du réseau unique et finement réglée La couche de transport à hautes performances utilisée pour les connexions à la base de données en cours sert également à toutes les opérations de synchronisation.

• Portabilité Le format de fichiers et la synchronisation sont portables sur toutes les plates-formes capables d'exécuter une machine virtuelle Java.

• Economies importantes Le serveur Haute disponibilité génère des économies significatives au tarif actuel des équipements haute disponibilité et du travail. Il s'exécute sur des matériels standard à bas prix. Il ne nécessite ni technologie particulière, comme les disques partagées, les réseaux locaux privés ou les canaux fibre, ni logiciel additionnel, ni système d'exploitation, comme Linux, Windows, Solaris ou Mac OSX.

• Facile à configurer, à administrer et à déployer Le serveur Haute disponibilité est une solution, haute performance et simple à utiliser, qui répond aux problèmes de bases de données les plus courants. Aucune expertise dans le domaine du clustering n'est nécessaire. Tous les paramètres de configuration et toutes les opérations explicites peuvent être traités en utilisant la console Blackfish SQL Server, les scripts SQL ou le code Java.

• Amélioration de l'évolutivité et de l'équilibrage de charge Les opérations de lecture seule peuvent être réalisées sur les miroirs en lecture seule, ce qui réduit la charge du travail transactionnel du miroir primaire, lequel doit être utilisé pour toutes les transactions exécutant des opérations d'écriture. En connectant les miroirs répertoire, les nouvelles demandes de connexion peuvent être réparties entre les divers miroirs en lecture seule. Cela peut réduire considérablement la charge de travail du serveur primaire.

• Délégation de la synchronisation Vous pouvez spécifier le miroir à utiliser pour synchroniser un autre miroir. Cela permet au miroir primaire de synchroniser un seul ou un petit nombre de miroirs en lecture seule. Ces miroirs en lecture seule peuvent ensuite synchroniser d'autres miroirs. Cela réduit la charge de travail du miroir primaire, qui doit servir toutes les demandes d'écriture.

• Sauvegarde incrémentielle de la base de données Les miroirs en lecture seule peuvent être synchronisés par le miroir

3 Blackfish SQL

21

3

Page 26: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

primaire automatiquement en planifiant une ou deux phases de synchronisation Les miroirs en lecture seule peuvent aussi servir à la sauvegarde manuelle en faisant une demande explicite de synchronisation.

• Répertoire distribué Ce système de basculement prenant en charge le basculement automatique et manuel de serveurs, un mécanisme gérant les répertoires distribués sert à localiser le miroir primaire et les miroirs en lecture seule disponibles. Tous les miroirs maintiennent une table des tous les autres miroirs. Une application peut faire n'importe quel type de demande de connexion (lecture/écriture ou lecture seule) à n'importe quel miroir existant. Le miroir utilise la table des miroirs pour déterminer où se trouvent les miroirs en cours.

Réplication hétérogène en utilisant DataExpress avec Blackfish SQL

REMARQUE : Cette fonctionnalité n'est prise en charge que par Blackfish SQL pour Java.

La prise en charge de la réplication assurée par DataExpress pour Blackfish SQL est bien plus facile à utiliser et à déployer quela plupart des autres solutions de réplication. L'utilisation de JDBC pour l'accès aux bases de données en fait une solutionhétérogène.

La topologie de la réplication n'est rien d'autre qu'une relation client-serveur. Blackfish SQL ne nécessite ni les logiciels ni lesdéclencheurs de bases de données que requièrent, côté serveur, les solutions plus complexes du type souscrire-et-publier. Leshiérarchies complexes à plusieurs niveaux et les topologies de type réseau ne sont pas directement prises en charge.

Le cycle de réplication comprend trois phases distinctes si on utilise les composants JavaBean de DataExpress avec BlackfishSQL pour des modèles informatiques déconnectés ou mobiles :

• Phase Fournir : Dote la base de données client d'une capture des tables du serveur en cours de réplication.

• Phase Modifier : L'application client, qui n'a pas besoin d'être connectée à la base de données, lit/modifie la base de données client.

• Phase Résoudre : Les modifications de la base de données client sont enregistrées dans la base de données du serveur.

Phase Fournir

L'implémentation d'un fournisseur de StorageDataSet commence par répliquer le contenu de la base de données depuis leserveur vers un client. Le client est toujours une base de données Blackfish SQL. Le serveur est généralement d'un typeaccessible par un pilote JDBC. Le fournisseur JDBC utilise une requête SQL ou une procédure stockée pour fournir les donnéesà répliquer dans la base de données Blackfish SQL côté client. Comme aucun logiciel n'est exécuté côté client dans cettearchitecture, il n'y a pas de prise en charge des mises à jour incrémentielles du serveur vers le client. Si le client a besoin d'uneactualisation, il faut re-exécuter la procédure stockée ou la requête utilisée pour assurer la réplication initiale.

Un fournisseur de StorageDataSet est une interface intégrable. QueryDataSet et ProcedureDataSet sont des extensionsde StorageDataSet et préconfigurent les JdbcProviders qui peuvent exécuter des requêtes SQL et des procéduresstockées pour remplir un StorageDataSet. Dans le cas de clients limités en mémoire, tels que les PDA, il peut être intéressantd'utiliser un composant DataSetData pour fournir des données. Le composant DataSetData utilise la sérialisation Java pourcréer un paquet de données facile à transmettre entre client et serveur.

La phase Fournir peut s'effectuer en une seule et même transaction pour plusieurs tables de la base de données afin d'obtenir laréplication d'une vue cohérente de ces tables au niveau transactionnel.

Phase Modifier

Lorsque la phase Fournir est terminée, DataExpress et les API JDBC peuvent lire et écrire dans les tables Blackfish SQL quirépliquent la base de données. Toutes les opérations insertion/mise à jour/suppression effectuées depuis la dernière exécutionde la phase Fournir sont automatiquement suivies par le système de stockage de Blackfish SQL. Un des rôles de l'interface destockage StorageDataSet est de veiller à ce que toutes les insertions, mises à jour et suppressions soient enregistréeslorsque la propriété resolvable du StorageDataSet est définie.

Blackfish SQL 3

22

3

Page 27: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Phase Résoudre

Dans DataExpress, un mécanisme automatique utilise un DML SQL ou des procédures stockées pour répercuter sur le serveurtoutes les modifications apportées au client, via un pilote JDBC. Une approche optimiste du contrôle de la simultanéité répercuteles modifications sur le serveur. Il est possible de résoudre une ou plusieurs tables dans une seule et même transaction. Pardéfaut, un conflit, tel qu'une mise à jour simultanée de la même ligne par deux utilisateurs, entraîne l'annulation de latransaction. Cependant, un composant JavaBean SqlResolutionManager peut être utilisé pour personnaliser la gestion deserreurs de résolution. Le SqlResolutionManager possède des gestionnaires d'événements qui permettent à une applicationde répondre à une condition d'erreur par ignore, retry, abort, log, ou par une autre réponse appropriée.

Avec des composants DataStorePump et DataStoreSync de plus haut niveau, il est possible d'exécuter les phases Fourniret Résoudre sur une collection de tables. Pour de plus amples informations, voir Administration de Blackfish SQL.

Voir aussi

Préface ( see page 1)

Présentation ( see page 3)

Etablissement des connexions ( see page 25)

Administration de Blackfish SQL ( see page 33)

Utilisation de la sécurité de Blackfish SQL ( see page 37)

Utilisation des procédures stockées et des fonctions définies par l'utilisateur ( see page 43)

Utilisation des déclencheurs dans les tables Blackfish SQL ( see page 57)

Référence des procédures stockées ( see page 61)

Référence SQL ( see page 77)

Optimisation des applications Blackfish SQL ( see page 127)

Déploiement des applications de bases de données Blackfish SQL ( see page 135)

Dépannage ( see page 139)

3 Blackfish SQL

23

3

Page 28: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier
Page 29: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

4 Etablissement des connexions

Ce chapitre explique comment établir une connexion à une base de données Blackfish SQL en utilisant dbExpress, ADO.NETou JDBC.

• Types de connexions

• Utilisation de dbExpress pour se connecter au serveur

• Utilisation d'ADO.NET pour se connecter au serveur

• Utilisation de JDBC pour se connecter au serveur

• Spécification des propriétés de connexion

• Utilisation de Blackfish SQL avec JBuilder et Borland Enterprise Server

• Prise en charge de la macro DataDirectory

Types de connexions

Les connexions peuvent être locales, distantes ou combiner les deux modes :

• Connexions locales Les connexions locales accèdent au processus du moteur de la base de données Blackfish SQL. Cela entraîne une amélioration des performances par rapport à l'utilisation d'un pilote distant, mais exige que le moteur Blackfish SQL soit présent et exécuté dans le même processus que l'application. Plusieurs connexions locales simultanées créées dans le même processus peuvent se connecter à une base de données. Cependant, un seul processus à la fois peut avoir un fichier de base de données ouvert. Par conséquent, dès qu'un processus a un fichier de base de données ouvert, il devient le seul processus pouvant se connecter à cette base de données via une connexion locale.

• Connexions distantes Pour utiliser une connexion distante, lancez d'abord le serveur Blackfish SQL. (Pour des instructions, voir Administration de Blackfish SQL.) Le pilote distant communique avec le serveur via TCP/IP. Les connexions distantes risquent d'être plus lentes dans le cas des interactions avec la base de données qui impliquent plusieurs aller-retour entre le client et la base de données pour les petits paquets de données. Les connexions distantes permettent plus de choses qu'un processus s'exécutant sur un ou plusieurs ordinateurs pour accéder à la même base de données. Si plusieurs processus demandent un accès simultané, il est préférable d'utiliser les connexions distantes.

• Connexions locales et distantes combinées Une troisième option est d'associer des connexions locales et distants. S'il s'avère qu'un processus assure la majorité des interactions avec la base de données, ce processus peut lancer le serveur Blackfish SQL au sein de son propre processus. De cette manière, le processus agissant le plus sur la base de données peut utiliser le pilote local, tout en laissant les autres processus accéder à la même base de données avec le pilote distant.

Utilisation de dbExpress pour se connecter au serveur

Les applications natives peuvent utiliser dbExpress pour établir des connexions distantes à un serveur Blackfish SQL. Lesconnexions locales ne sont pas actuellement prises en charge pour dbExpress. Vous devez démarrer le serveur Blackfish SQL

4 Blackfish SQL

25

4

Page 30: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

avant d'utiliser le pilote distant dbExpress pour vous connecter. (Pour des instructions, voir Administration de Blackfish SQL.)

Exemple

Cet exemple montre comment acquérir une connexion distante dbExpress :

[BlackfishSQL] uses DBXCommon; uses DBXClient; var Connection: TDBXConnection; Connection := TDBXConnectionFactory.GetConnectionFactory.GetConnection('BLACKFISHSQLCONNECTION');

Le fichier dbExpress dbxdriver.ini contient les propriétés par défaut du pilote ; elles conviennent à la majorité desapplications. La section BLACKFISHSQLCONNECTION du fichier dbExpress dbxconnections.ini contient les paramètres deconnexion par défaut. Les nouvelles connexions peuvent copier la plupart de ces propriétés. La liste des propriétés esthabituellement personnalisée pour les nouvelles connexions :

• [BLACKFISHCUSTOMCONNECTION]

• HostName=localhost

• port=2508

• Database=c:/tmp/test

Utilisation d'ADO.NET pour se connecter au serveur

L'assemblage Blackfish SQL Borland.Data.BlackfishSQL.LocalClient.dll contient un pilote ADO.NET 2.0. Vouspouvez construire une application sans référence directe à cet assemblage en utilisant la classe DbProviderFactory. Danscette approche, le fichier machine.config doit contenir des références aux assemblages Blackfish SQL dans sa sectionDbProviderFactory, et les assemblages Blackfish SQL doivent être installés dans le GAC (Global Assembly Cache). Pour unmeilleur déploiement, utilisez une référence directe à l'assemblage Blackfish SQL.

Vous pouvez utiliser une connexion ADO locale, une connexion ADO distante, ou une combinaison des deux, pour vousconnecter au serveur Blackfish SQL.

Connexions locales en utilisant ADO.NET

Vous pouvez établir une connexion ADO locale de l'une des façons suivantes :

• Connexion ADO.NET locale avec DbProviderFactory

• Connexion ADO.NET locale avec une référence directe à la classe

Connexion ADO.NET locale avec DbProviderFactory

Exemple

Cet exemple montre comment acquérir une connexion ADO locale avec DbProviderFactory :

[References: System.Data.dll] uses System.Data.Common;var Factory: DbProviderFactory; var Connection: DbConnection;Factory := DbProviderFactories.GetFactory('Borland.Data.BlackfishSQL.LocalClient'); Connection := Factory.CreateConnection(); Connection.ConnectionString := 'database=<nomfichier>;user=<nomutilisateur>;password=<motdepasse>'; Connection.Open;

Blackfish SQL 4

26

4

Page 31: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Connexion ADO.NET locale avec une référence directe à la classe

Exemple

Cet exemple montre comment acquérir une connexion ADO locale avec une référence directe à la classe :

[References: System.Data.dll] [References: Borland.Data.BlackfishSQL.LocalClient.dll] uses System.Data.Common;uses Borland.Data.DataStore;var Connection: DbConnection;Connection := DataStoreConnection.Create;Connection.ConnectionString := 'database=<nomfichier>;user=<nomutilisateur>;password=<motdepasse>'; Connection.Open;

Connexions distantes en utilisant ADO.NET

Les applications gérées peuvent utiliser ADO.NET pour établir des connexions distantes au serveur Blackfish SQL. Vous devezdémarrer le serveur avant d'utiliser le pilote ADO distant pour vous connecter. (Pour des instructions, voir Administration deBlackfish SQL.) Lorsque le serveur s'exécute, vous pouvez acquérir une connexion ADO distante de l'une des façons suivantes :

• Connexion ADO.NET distante avec DbProviderFactory

• Connexion ADO.NET distante avec une référence directe à la classe

Connexion ADO.NET distante avec DbProviderFactory

Exemple Cet exemple montre comment acquérir une connexion ADO distante avec DbProviderFactory :

[References: System.Data.dll] uses System.Data.Common;var Factory: DbProviderFactory; var Connection: DbConnection;Factory := DbProviderFactories.GetFactory('Borland.Data.BlackfishSQL.RemoteClient'); Connection := Factory.CreateConnection(); Connection.ConnectionString :='database=<nomfichier>;user=<nomutilisateur>;password=<motdepasse>;host=<nomserveur>;protocol=TCP'; Connection.Open;

Connexion ADO.NET distante avec une référence directe à la classe

Exemple Cet exemple montre comment acquérir une connexion ADO distante avec une référence directe à la classe :

[References: System.Data.dll] [References: Borland.Data.BlackfishSQL.RemoteClient.dll] uses System.Data.Common;uses Borland.Data.DataStore;var Connection: DbConnection;Connection := DataStoreConnection.Create;Connection.ConnectionString :='database=<nomfichier>;user=<nomutilisateur>;password=<motdepasse>;host=<nomserveur>;protocol=T

4 Blackfish SQL

27

4

Page 32: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

CP'; Connection.Open;

Utilisation de JDBC pour se connecter au serveur

Vous pouvez utiliser une connexion JDBC locale, une connexion JDBC distante, ou une combinaison des deux, pour vousconnecter au serveur Blackfish SQL. Les sections suivantes donnent les instructions correspondant à chacune de cesprocédures.

Connexions locales en utilisant JDBC

La connexion JDBC locale à Blackfish SQL permet à une application de s'exécuter dans le même processus que le moteurBlackfish SQL. Pour les applications qui font beaucoup d'appels de méthodes dans l'API JDBC, l'utilisation du pilote BlackfishSQL local se traduira par un gain de performances significatif.

Vous pouvez établir une connexion JDBC locale de l'une des façons suivantes :

• Connexion JDBC locale avec le gestionnaire de pilotes

• Connexion JDBC locale avec une source de données JDBC

Connexion JDBC locale avec le gestionnaire de pilotes

Exemple Cet exemple montre comment acquérir une connexion JDBC locale avec le gestionnaire de pilotes :

[jdsserver.jar doit être dans le classpath]java.sql.DriverManager.registerDriver(new com.borland.datastore.jdbc.DataStoreDriver()); connection = java.sql.DriverManager.getConnection("jdbc:borland:dslocal:<nomfichier>", "<nomutilisateur>", "<motdepasse>");

Connexion JDBC locale avec une source de données JDBC

Exemple Cet exemple montre comment acquérir une connexion JDBC locale avec une source de données JDBC :

[jdsserver.jar doit être dans le classpath]com.borland.javax.sql.JdbcDataSource dataSource = new com.borland.javax.sql.JdbcDataSource(); dataSource.setDatabaseName("<nomfichier>"); connection = dataSource.getConnection("<nomutilisateur>", "<motdepasse>");

Connexions distantes en utilisant JDBC

Les applications gérées peuvent utiliser JDBC pour établir des connexions distantes au serveur Blackfish SQL. Vous devezdémarrer le serveur avant d'utiliser le pilote ADO distant pour vous connecter. (Pour des instructions, voir Administration deBlackfish SQL.)

Vous pouvez établir une connexion JDBC distante de l'une des façons suivantes :

• Connexion JDBC distante avec le gestionnaire de pilotes

• Connexion JDBC distante avec une source de données JDBC

Connexion JDBC distante avec le gestionnaire de pilotes

Exemple

Cet exemple montre comment acquérir une connexion JDBC distante avec le gestionnaire de pilotes :

Blackfish SQL 4

28

4

Page 33: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

[jdsremote.jar doit être dans le classpath] java.sql.DriverManager.registerDriver(new com.borland.datastore.jdbc.DataStoreDriver()); connection = java.sql.DriverManager.getConnection("jdbc:borland:dsremote://<nomserveur>/<nomfichier>", "<nomutilisateur>", "<motdepasse>");

Connexion JDBC distante avec une source de données JDBC

Exemple Cet exemple montre comment acquérir une connexion JDBC locale avec une source de données JDBC :

[jdsremote.jar doit être dans le classpath] com.borland.javax.sql.JdbcDataSource dataSource = new com.borland.javax.sql.JdbcDataSource(); dataSource.setDatabaseName("<nomfichier>"); dataSource.setNetworkProtocol("tcp");datasource.setServerName("<nomserveur>"); connection = dataSource.getConnection("<nomutilisateur>", "<motdepasse>");

Spécification des propriétés de connexion

Vous pouvez spécifier des propriétés de connexion pour :

• dbExpress

• ADO

• JDBC

Pour de plus amples informations, voir Borland.Data.DataStore.ConnectionProperties dans l'aide RAD Studio.

Spécification des propriétés de connexion dbExpress

Les propriétés de connexion dbExpress sont documentés dans l'unité DbxCommon.pas et dans la classe Blackfish SQLConnectionProperties. Les propriétés de connexion dbExpress sont stockées dans le fichier dbxconnections.init.

Exemple

Voici l'exemple d'une section définissant les propriétés de connexion Blackfish SQL, contenue dans le fichierdbxconnections.ini :

[BLACKFISHSQLCONNECTION] DriverName=BlackfishSQL HostName=localhostport=2508Database=/tmp/testcreate=true User_Name=sysdbaPassword=masterkey BlobSize=-1 TransIsolation=ReadCommitted

Les propriétés HostName, port et create sont documentées dans ConnectionProperties. Les propriétés DriverName,User_Name, BlobSize et TransIsolation sont documentées dans TDBXPropertyNames de l'unité DBXCommon.

Spécification des propriétés de connexion ADO

La propriété ConnectionString de DbConnection ou de DataStoreConnection peut contenir des valeurs issues deConnectionProperties.

Vous pouvez utiliser DataExplorer pour définir et modifier les valeurs de ConnectionProperties. Pour les instructions, voirdans l'aide RAD Studio la boîte de dialogue Connexion DataExplorer.

4 Blackfish SQL

29

4

Page 34: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Spécification des propriétés de connexion JDBC

Vous pouvez spécifier les propriétés de connexion JDBC par l'un des moyens suivants :

• une URL JDBC

• java.util.Properties

Spécification des propriétés de connexion JDBC dans une URL JDBC

Vous pouvez spécifier les propriétés de connexion dans une URL JDBC en les séparant par des points-virgules.

jdbc:borland:dslocal:c:/mydb.jds;create=true

Spécification des propriétés de connexion avec java.util.Properties

Exemple

Cet exemple montre comment spécifier les propriétés de connexion JDBC avec un objet java.util.Properties :

java.util.Properties props = new java.util.Properties(); props.setProperty("create","true"); props.setProperty("user","SYSDBA"); props.setProperty("password","masterkey"); connection = DriverManager.getConnection("jdbc:borland:dslocal:c:/mydb.jds", props);

Utilisation de Blackfish SQL avec JBuilder et Borland Enterprise Server

Pour que la dernière version de Blackfish SQL soit accessible à JBuilder et à Borland Enterprise Server (BES), copiez lesfichiers suivants du répertoire lib de Blackfish SQL dans le répertoire lib du produit concerné :

• beandt.jar

• dbtools.jar

• dx.jar

• jds.jar

• jdsremote.jar

• jdsserver.jar

1. Dans le répertoire lib de l'arborescence créée par l'installation de JBuilder ou de BES, recherchez les fichiers cités et copiez-les dans un répertoire de sauvegarde.

2. Dans le répertoire lib de l'installation de Blackfish SQL, recherchez les fichiers cités et copiez-les dans le répertoire lib de JBuilder ou de BES.

Prise en charge de la macro DataDirectory

Vous pouvez utiliser la macro DataDirectory si vous voulez spécifier de manière relative les noms de chemins des fichiers dela base de données. La macro DataDirectory est prise en charge à la fois pour les pilotes ADO.NET et DBXClient. Si le nomd'un fichier de la base de données est préfixé par la chaîne suivante :

|DataDirectory|

par exemple :

|DataDirectory|employee.jds

la chaîne |DataDirectory| sera remplacée par la chaîne appropriée, comme suit :

Blackfish SQL pour Windows :

• Pour les applications web ASP.NET, ce sera le nom du dossier App_Data.

Blackfish SQL 4

30

4

Page 35: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

• Pour les applications non web, ce sera par défaut le répertoire de l'exécutable de l'application. Vous pouvez modifier cette valeur par défaut en définissant la propriété DataDirectory de AppDomain :

AppDomain.CurrentDomain.SetData("DataDirectory", "CustomAppPath")

Blackfish SQL pour Java :

Si la propriété System blackfishsql.datadirectory est définie, la valeur de cette propriété sera utilisée comme chaîne deremplacement. Sinon, c'est la valeur de la propriété user.home qui sera utilisée.

Voir aussi

Préface ( see page 1)

Présentation ( see page 3)

Architecture du système ( see page 7)

Administration de Blackfish SQL ( see page 33)

Utilisation de la sécurité de Blackfish SQL ( see page 37)

Utilisation des procédures stockées et des fonctions définies par l'utilisateur ( see page 43)

Utilisation des déclencheurs dans les tables Blackfish SQL ( see page 57)

Référence des procédures stockées ( see page 61)

Référence SQL ( see page 77)

Optimisation des applications Blackfish SQL ( see page 127)

Déploiement des applications de bases de données Blackfish SQL ( see page 135)

Dépannage ( see page 139)

4 Blackfish SQL

31

4

Page 36: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier
Page 37: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

5 Administration de Blackfish SQL

Ce chapitre est une brève présentation des procédures et des outils d'administration de Blackfish SQL. Pour de plus amplesinformations, voir la Référence SQL.

• Utilisation de la console graphique pour les tâches d'administration

• Utilisation de SQL pour les tâches d'administration

• Démarrage du serveur Blackfish SQL

Utilisation de la console graphique pour les tâches d'administration

Il existe des outils visuels permettant d'administrer Blackfish SQL.

Blackfish SQL pour Windows :

Pour nombre des tâches administratives, vous pouvez utiliser RAD Studio DataExplorer. DataExplorer a été amélioré par l'ajoutd'un éditeur des chaînes de connexion à Blackfish SQL pour Windows, et des capacités de création et de modification desbases de données Blackfish SQL. DataExplorer vous permet de parcourir et de visualiser les procédures stockées. Les tâchesde DataExplorer ne sont pas encore prises en charge dans Blackfish SQL pour Windows. Pour de plus amples informations, voirl'aide de DataExplorer.

Blackfish SQL pour Java :

Vous pouvez utiliser l'une des consoles administratives de JBuilder suivantes :

• JdsExplorer

• ServerConsole

La documentation pour JdsExplorer et celle pour ServerConsole sont fournies avec JBuilder.

Utilisation de SQL pour les tâches d'administration

Vous pouvez exécuter pratiquement toutes les tâches d'administration de Blackfish SQL au moyen des commandes SQL ou desprocédures stockées intégrées à la classe DB_ADMIN.

Utilisez les commandes SQL d'administration pour :

• Créer, modifier et supprimer des tables et des vues

• Créer, modifier et supprimer des utilisateurs et des rôles

• Créer et supprimer des procédures stockées et des déclencheurs

5 Blackfish SQL

33

5

Page 38: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Pour de plus amples informations, voir la Référence SQL.

Utilisez les procédures stockées de DB_ADMIN pour :

• Modifier les propriétés de la base de données

• Vérifier l'intégrité de la base de données

• Configurer la connexion à la base de données

• Voir les connexions au serveur ouvertes

• Créer, modifier et supprimer les miroirs de la base de données

• Les autres fonctionnalités d'administration des miroirs

Pour de plus amples informations, voir la Référence des procédures stockées.

Démarrage du serveur Blackfish SQL

Un serveur doit être en exécution avant l'établissement d'une connexion distante. Le serveur peut être démarré commeprocessus .NET ou comme processus Java.

Démarrage et arrêt du serveur comme processus .NET

Pour démarrer et arrêter le serveur comme processus .NET, utilisez l'un des moyens suivants :

• La commande BSQLServer.exe

• La console de gestion de Windows

Utilisation de BSQLServer.exe

• Pour démarrer le serveur : BSQLServer.exe

• Pour arrêter le serveur : BsqlServer.exe -shutdown ou Tapez Ctrl-C dans la fenêtre de la console

• Pour installer le serveur en tant que service Windows : BsqlServer.exe -install

• Pour retirer le serveur Windows : BsqlServer.exe -remove

• Pour explorer les autres options de configuration du serveur : BsqlServer.exe -?

Utilisation de la console de gestion de Windows

• Pour démarrer le serveur : net start BlackfishSQL

• Pour arrêter le serveur : net stop BlackfishSQL

Démarrage du serveur comme processus Java

Pour démarrer et arrêter le serveur comme processus Java, utilisez l'un des moyens suivants :

• La commande JdsServer.exe

• La console de gestion de Windows

Utilisation de JdsServer.exe

• Pour démarrer le serveur : JdsServer.exe

• Pour arrêter le serveur : JdsServer.exe -shutdown or Tapez Ctrl-C dans la fenêtre de la console

Blackfish SQL 5

34

5

Page 39: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

• Pour installer le serveur en tant que service Windows : JdsServer.exe -install JDataStore

• Pour retirer le serveur Windows : JdsServer.exe -remove JDataStore

• Pour explorer les autres options de configuration du serveur : JdsServer.exe -?

Utilisation de la console de gestion de Windows

• Pour démarrer le serveur : net start JDataStore

• Pour arrêter le serveur : net stop JDataStore

Voir aussi

Préface ( see page 1)

Présentation ( see page 3)

Architecture du système ( see page 7)

Etablissement des connexions ( see page 25)

Utilisation de la sécurité de Blackfish SQL ( see page 37)

Utilisation des procédures stockées et des fonctions définies par l'utilisateur ( see page 43)

Utilisation des déclencheurs dans les tables Blackfish SQL ( see page 57)

Référence des procédures stockées ( see page 61)

Référence SQL ( see page 77)

Optimisation des applications Blackfish SQL ( see page 127)

Déploiement des applications de bases de données Blackfish SQL ( see page 135)

Dépannage ( see page 139)

5 Blackfish SQL

35

5

Page 40: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier
Page 41: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

6 Utilisation de la sécurité de Blackfish SQL

Ce chapitre est une brève présentation des fonctionnalités de sécurité Blackfish SQL, et des commandes SQL qui lesimplémentent. Pour la description complète de la syntaxe, l'utilisation et les exemples d'une commande spécifique, voir laRéférence SQL ou la Référence des procédures stockées.

Blackfish SQL intègre les fonctionnalités de sécurité suivantes :

• Authentification de l'utilisateur

• Autorisation de l'utilisateur

• Chiffrement des bases de données

Authentification de l'utilisateur

L'authentification de l'utilisateur limite l'accès à une base de données Blackfish SQL aux seuls utilisateurs autorisés. Lesutilisateurs doivent se connecter à la base de données en utilisant un compte et un mot de passe autorisés. Des permissionspeuvent être accordées, ou retirées, à un compte afin de régler finement les accès. En général, l'accès complet est réservé au(x)compte(s) d'administrateur, et un ou plusieurs comptes restreints sont fournis aux utilisateurs ordinaires.

Le compte de l'administrateur

Par défaut, Blackfish SQL intègre le compte d'administrateur, sysdba/masterkey. Vous pouvez sécuriser une base dedonnées en modifiant le mot de passe du compte sysdba et en limitant l'utilisation de ce compte aux seuls administrateurs de labase de données. Vous pouvez ensuite créer un compte utilisateur aux droits d'accès limités qui servira à l'accès ordinaire. Vouspouvez également créer des comptes d'administrateur supplémentaires, qui peuvent ou non recevoir les droits de démarrage dela base de données.

La section suivante décrit comment créer des comptes utilisateur.

Gestion des comptes utilisateur

Vous pouvez utiliser les instructions SQL suivantes pour ajouter, supprimer et modifier des comptes utilisateur :

Ajout d'un utilisateur

CREATE <idutilisateur> PASSWORD <motdepasse>

6 Blackfish SQL

37

6

Page 42: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Où :

<idutilisateur> est le compte à ajouter.

<motdepasse> est le mot de passe du compte.

Suppression d'un utilisateur

DROP <idutilisateur> [ CASCADE|RESTRICT ]

Où :

<idutilisateur> est le compte à supprimer.

CASCADE supprime l'utilisateur et tous les objets en sa possession.

RESTRICT provoque l'échec de l'instruction si l'utilisateur possède des objets tels que des tables, des vues ou des méthodes.

(aucune option) provoque l'échec de l'instruction si l'utilisateur possède des objets tels que des tables, des vues ou desméthodes.

Changement du mot de passe d'un utilisateur

ALTER USER <idutilisateur> SET PASSWORD "<motdepasse>";

Où :

<idutilisateur> est le compte dont le mot de passe est à modifier.

<motdepasse> est le nouveau mot de passe.

Autorisation de l'utilisateur

Il existe plusieurs droits d'accès à une base de données que vous pouvez accorder ou retirer à un compte. La section suivantedécrit l'ensemble des droits d'accès, et comment les accorder et les retirer à un compte.

Modification des droits d'accès des utilisateurs

Vous pouvez utiliser les instructions GRANT et REVOKE pour modifier les droits d'accès d'un ou de plusieurs comptesutilisateur. Vous pouvez accorder ou retirer l'accès aux ressources d'une base de données spécifique ou l'accès à des objetsspécifiques dans une base de données. De plus, vous pouvez accorder des droits spécifiques à des rôles nommés, puisaccorder ou retirer ces rôles à certains des utilisateurs.

Pour accorder ou retirer un droit à un compte, utiliser les commandes SQL suivantes :

GRANT <rôle>|<droit> TO <idutilisateur>

Accorde le droit ou le rôle spécifié au compte utilisateur spécifié.

REVOKE <rôle>|<droit> FROM <idutilisateur>

Retire le droit ou le rôle spécifié au compte utilisateur spécifié.

Où :

<idutilisateur> est le compte à modifier.

<rôle> est le rôle d'utilisateur à accorder ou à retirer, par exemple ADMIN. Cela peut être un seul rôle ou une liste de rôlesséparés par des virgules.

<droit> est le droit à accorder ou à retirer. Cela peut être un seul droit ou une liste de droits séparés par des virgules, et un ouplusieurs des éléments suivants :

• STARTUP donne le droit d'ouvrir une base de données fermée. Le mot de passe de l'utilisateur est requis pour ajouter le droit STARTUP à un compte utilisateur. Vous pouvez également spécifier le droit STARTUP lors de la création d'un compte utilisateur.

Blackfish SQL 6

38

6

Page 43: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

• ADMINISTRATOR donne le droit d'ajouter, de supprimer ou de modifier les droits des utilisateurs, ainsi que le droit de chiffrer la base de données. Inclut également les quatre droits sur les flux : WRITE, CREATE, DROP, RENAME. Le droit STARTUP est accordé par défaut lors de la création d'un compte d'administrateur, mais vous pouvez retirer d'un compte d'administrateur le droit STARTUP. Vous ne pouvez pas retirer d'un compte d'administrateur les droits WRITE, CREATE, DROP et RENAME ; les tentatives de retrait de ces droits seront ignorées.

• WRITE donne le droit d'écrire dans les flux de fichiers ou de tables de la base de données Blackfish SQL.

• CREATE donne le droit de créer de nouveaux flux de fichiers ou de tables dans la base de données Blackfish SQL.

• DROP donne le droit de supprimer les flux de fichiers ou de tables de la base de données Blackfish SQL.

• RENAME donne le droit de renommer les flux de fichiers ou de tables de la base de données Blackfish SQL.

Chiffrement des bases de données

Seul un utilisateur possédant le droit Administrator peut chiffrer une base de données. Lorsqu'une base de données estchiffrée, le droit STARTUP est automatique retiré à tous les utilisateurs (y compris aux administrateurs) autres quel'administrateur ayant émis la commande de chiffrement. Par conséquent, après le chiffrement, vous devez utiliser le mêmecompte d'administrateur pour redémarrer la base de données. Vous pouvez réassigner des droits STARTUP aux autresutilisateurs après que la base de données a été chiffrée et redémarrée.

Chiffrement d'une base de données Blackfish SQL

Vous pouvez utiliser la procédure stockée intégrée DB_ADMIN.ENCRYPT() pour chiffrer une base de données Blackfish SQL,nouvelle ou vide. Pour les instructions de chiffrement d'une base de données non vide, voir Chiffrement d'une base de donnéesayant un contenu

Pour chiffrer une nouvelle base de données, connectez-vous en utilisant un compte d'administrateur et exécutez la commandeSQL suivante :

CALL DB_ADMIN.ENCRYPT(<MotdepasseAdmin>,<GermeChiffrement>)

Où :

DB_ADMIN.ENCRYPT() est la procédure stockée intégrée qui chiffre les bases de données.

<MotdepasseAdmin> est le mot de passe de l'utilisateur qui émet la commande de chiffrement.

<GermeChiffrement> est une valeur de germe de 16 caractères.

Chiffrement d'une base de données ayant un contenu

Blackfish SQL pour Java :

Pour chiffrer une base de données Blackfish SQL pour Java dont les tables existent, utilisez l'utilitaire JBuilder, JdsExplorer.Pour les instructions, voir JdsExplorer dans l'aide en ligne de JBuilder.

Blackfish SQL pour Windows :

Pour chiffrer une base de données dont le contenu existe, procédez comme suit :

1. Utilisez RAD Studio DataExplorer pour créer une nouvelle base de données. Pour les instructions, voir DataExplorer dans l'aide en ligne.

2. Copiez les utilisateurs existants dans la nouvelle base de données. DB_ADMIN.COPY_USERS(<NomAutreFichier>, <UtilisateurAdmin>, <PasseAdmin>,<CopierChiffrement>, <RemplacerUtilisateursExistants>) Où : <NomAutreFichier> est le nom de fichier de la base de données cible. <UtilisateurAdmin> est un utilisateur possédant les droits ADMIN sur la base de données cible. <PasseAdmin> est le mot de passe de l'utilisateurAdmin spécifié. Si <CopierChiffrement> vaut TRUE et si la base de données source est chiffrée, chiffre la base de données cible en utilisant la même clé. Si <RemplacerUtilisateursExistants> vaut TRUE, les utilisateurs existant dans la base de données cible sont remplacés par les utilisateurs de la base source.

3. Chiffrez la nouvelle base de données. DB_ADMIN.ENCRYPT(<motdepasse>,<GermeChiffrement>)

4. Copiez le contenu de l'ancienne base dans la base nouvellement chiffrée.

6 Blackfish SQL

39

6

Page 44: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

DB_ADMIN.COPY_STREAMS(<NomAutreFichier>, <UtilisateurAdmin>, <PasseAdmin>,<Ecraser>, <IgnorerErreurs>) Où : <NomAutreFichier> est le nom de fichier de la base de données cible. <UtilisateurAdmin> est un utilisateur possédant les droits ADMIN sur la base de données cible. <PasseAdmin> est le mot de passe de l'utilisateurAdmin spécifié. Si <Ecraser> vaut TRUE, les tables peuvent être écrasées. S'il vaut FALSE, cela produira une erreur. Si <IgnorerErreurs> vaut TRUE, cette méthode peut servir à réparer une base de données endommagée.

Pour de plus amples informations, voir la Référence des procédures stockée.

Comment appliquer la sécurité Blackfish SQL

Dans la discussion qui suit, nous appelons opposant toute personne essayant de forcer le système de sécurité de Blackfish SQL.

Le support de l'authentification et de l'autorisation sécurise les applications côté serveur où les opposants n'ont pas accès auxfichiers physiques des bases de données Blackfish SQL. La table SYS.USERS stocke les mots de passe, les ID utilisateur et lesdroits sous forme chiffrée. Cette table stocke également l'ID utilisateur et les droits dans une colonne non chiffrée, mais à desfins d'affichage uniquement. Les valeurs chiffrées de l'ID utilisateur et des droits sont utilisées pour imposer la sécurité.

Les mots de passe stockés sont chiffrés à l'aide du solide algorithme TwoFish. Un générateur de nombres pseudo-aléatoiressert à corser le chiffrement des mots de passe. Cela rend plus difficiles les habituelles attaques des mots de passe au moyend'un dictionnaire. Dans une attaque par dictionnaire, l'opposant essaie de deviner le mot de passe jusqu'à ce qu'il y arrive. Ceprocédé est facilité si l'opposant détient des informations personnelles sur l'utilisateur et si celui-ci a choisi un mot de passeévident. Bien choisir le mot de passe (qu'il soit imprévisible) est la meilleure défense contre les attaques par dictionnaire. Quandun mot de passe incorrect est saisi, le thread en cours se met en sommeil pendant 500 millisecondes.

Si une base de données Blackfish SQL n'est pas chiffrée, il est important de limiter l'accès physique au fichier, pour les raisonssuivantes :

• Si un fichier de base de données Blackfish SQL n'est pas protégé par un mot de passe, et s'il est possible à un opposant d'écrire dans ce fichier depuis un utilitaire ou un programme d'édition séparé, la prise en charge de l'authentification et de l'autorisation peut être désactivée.

• S'il est possible à un opposant de lire un fichier de base de données Blackfish SQL non chiffré depuis un utilitaire ou un programme d'édition séparé, l'opposant risque de disséquer le format du fichier et de voir le contenu de celui-ci.

Dans les environnements où un opposant dangereux risque d'accéder aux copies physiques d'une base de données BlackfishSQL, la base de données et les fichiers historiques doivent être non seulement protégés par un mot de passe mais égalementchiffrés. ATTENTION : Les techniques de chiffrement utilisées par Blackfish SQL pour chiffrer les blocs de données sont ce quise fait de mieux. Le chiffreur de blocs TwoFish utilisé par Blackfish SQL n'a jamais été pris en défaut. Cela signifie que, si vousoubliez votre mot de passe pour une base de données Blackfish SQL chiffrée, vous ne pourrez plus accéder à la base dedonnées. Vos meilleures chances de retrouver vos données seraient que quelqu'un devine votre mot de passe.

Certaines mesures peuvent être prises pour se protéger de l'oubli du mot de passe pour une base de données chiffrée. Il fautsavoir qu'il existe un mot de passe maître utilisé en interne pour chiffrer les blocs de données. Tout utilisateur possédant le droitSTARTUP a accès au mot de passe maître chiffré en utilisant son propre mot de passe sur la table SYS.USERS. Cela permet àun ou à plusieurs utilisateurs d'ouvrir une base de données qui a été fermée ; en effet, leur mot de passe peut déchiffrer unecopie du mot de passe maître. Cette fonctionnalité permet de créer une nouvelle base de données avec un utilisateur secretdétenant les droits d'un administrateur (qui incluent le droit STARTUP). Si vous utilisez cette base de données vierge chaque foisqu'une nouvelle base de données vide est nécessaire, vous disposez toujours d'un utilisateur secret qui peut déverrouiller lechiffrement.

Le chiffrement des bases de données a un impact sur les performances. Les blocs de données sont chiffrés lors de leur écrituredepuis le cache Blackfish SQL dans la base de données Blackfish SQL, et déchiffrés lors de leur lecture depuis la base dedonnées Blackfish SQL dans le cache Blackfish SQL. Ainsi, le coût du chiffrement ne se fait sentir que lors d'une opérationd'entrée/sortie.

Blackfish SQL chiffre tout sauf les 16 premiers octets des blocs de données du fichier .jds. Les 16 premiers octets d'un bloc necontiennent aucunes données sur l'utilisateur. Certains blocs ne sont pas chiffrés. Ce sont les blocs des bitmaps d'allocation, lebloc d'en-tête, les blocs d'ancrage des historiques et les blocs de la table SYS.USERS. Notez que les champs sensibles de la

Blackfish SQL 6

40

6

Page 45: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

table SYS.USERS sont chiffrés à l'aide du mot de passe de l'utilisateur. Les blocs des fichiers historiques sont entièrementchiffrés. Les fichiers d'ancrage des historiques et les fichiers historiques des états ne sont pas chiffrés. La base de donnéestemporaire utilisée par le moteur de requête est chiffrée. Les fichiers de tri utilisés lors des fusions volumineuses ne sont paschiffrés, mais ils sont supprimés à la fin du tri.

REMARQUE : Actuellement, le client distant de Blackfish SQL utilise des sockets pour communiquer avec un serveur BlackfishSQL. Cette communication n'est pas sécurisée. En revanche, le client local de Blackfish SQL est sécurisé car il appartient aumême processus.

Voir aussi

Préface ( see page 1)

Présentation ( see page 3)

Architecture du système ( see page 7)

Etablissement des connexions ( see page 25)

Administration de Blackfish SQL ( see page 33)

Utilisation des procédures stockées et des fonctions définies par l'utilisateur ( see page 43)

Utilisation des déclencheurs dans les tables Blackfish SQL ( see page 57)

Référence des procédures stockées ( see page 61)

Référence SQL ( see page 77)

Optimisation des applications Blackfish SQL ( see page 127)

Déploiement des applications de bases de données Blackfish SQL ( see page 135)

Dépannage ( see page 139)

6 Blackfish SQL

41

6

Page 46: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier
Page 47: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

7 Utilisation des procédures stockées et des fonctions définies par l'utilisateur

Blackfish SQL utilise les procédures stockées pour encapsuler la logique métier dans le schéma d'une base de données.Blackfish SQL utilise les fonctions définies par l'utilisateur (FDU) pour étendre la prise en charge intégrée de SQL. Alors quebeaucoup d'autres fournisseurs de bases de données ont inventé pour les procédures stockées leur propre pseudo-SQL,Blackfish SQL peut accéder aux procédures stockées et aux FDU créées avec n'importe quel langage .NET, comme Delphi, C#,VB et Java.

De plus, les procédures stockées peuvent augmenter les performances d'une application car elles sont exécutées dans la mêmemachine virtuelle que le moteur de la base de données Blackfish SQL. Il en résulte une exécution dans un temps systèmeminimal. Pendant qu'une procédure stockée exécute des instructions SQL, aucun trafic n'est généré sur le réseau. La procédurestockée utilise une connexion ADO.NET du processus. Cela offre, quant aux performances, le même avantage que l'utilisationd'un pilote ADO.NET du processus Blackfish SQL, à la place d'un pilote distant.

Les procédures stockées et les FDU présentent les avantages supplémentaires suivants :

• La logique métier, comme les contraintes d'intégrité, est isolée dans le moteur de la base de données, où elle est accessible, et imposée, à tous les clients.

• Les données sont traités localement, ce qui est plus rapide que de les envoyer vers un client ou depuis un client.

• Le langage Blackfish SQL peut être étendu par l'utilisation des fonctions C#, Delphi ou Visual Basic.

• Les performances ne sont pas pénalisées car les procédures stockées sont exécutées dans la même machine virtuelle que la base de données elle-même.

• Vous pouvez déboguer les procédures stockées .NET de la même manière que l'application client.

Ce chapitre contient les sections suivantes :

• A propos des procédures stockées

• A propos des fonctions définies par l'utilisateur (FDU)

• Création de procédures stockées pour la plate-forme .NET

• Débogage des procédures stockées .NET

• Utilisation d'une procédure stockée pour produire un IDataReader ADO.NET

• Création de procédures stockées pour la plate-forme Java

7 Blackfish SQL

43

7

Page 48: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

A propos des procédures stockées

Les procédures stockées sont des procédures stockées sur le serveur de la base de données et exécutées à la demande d'unclient SQL. Généralement, la procédure stockée exécute plusieurs requêtes SQL sur les tables de la base de données afin deproduire le résultat souhaité. Dans Blackfish SQL, ces requêtes SQL seront écrites dans le langage de votre choix parmi ceuxdisponibles sur les plates-formes .NET ou Java. Le but visé peut être la mise à jour d'un ensemble de tables, ou le calcul d'unevaleur cumulative à partir d'une ou de plusieurs tables, ou l'ajout de contraintes d'intégrité spéciales. Une procédure stockéepeut admettre plusieurs paramètres, qui peuvent être en entrée uniquement, en sortie uniquement, ou en entrée et en sortie.

Exemple

Considérez une procédure ADD_ORDER : elle prend un customerId, une itemId et une quantity comme valeurs d'entrée, etajoute un enregistrement à la table ORDERS. Supposez que vous vouliez aussi vérifier que ce client a payé toutes ses facturesprécédentes. Et, si ce n'est pas le cas, vous voulez que la procédure déclenche une exception.

La procédure stockée est exécutée avec un objet IDbCommand en définissant les propriétés CommandType et CommandText,et en ajoutant les paramètres appropriés.

CommandText CommandType Paramètres

'CALL ADD_ORDER(?,?,?)' CommandType.Text Ajoutés dans l'ordre gauche vers droite

'CALLADD_ORDER(:CUSTID,:ITEMID,:QUANTITY)'

CommandType.Text Ajoutés dans l'ordre des noms demarqueurs

'ADD_ORDER' CommandType.StoredProcedure Ajoutés dans l'ordre des noms deparamètres

Notez que l'interprétation des paramètres est différente selon la combinaison du CommandType et du style des marqueurs deparamètres. Si le CommandType est StoredProcedure, les noms des paramètres sont tirés de l'implémentation de laprocédure stockée ; en ce cas, les paramètres optionnels peuvent être omis.

A propos des fonctions définies par l'utilisateur (FDU)

Une Fonction Définie par l'Utilisateur est un snippet de code écrit pour étendre la prise en charge intégrée de SQL. Comme lesprocédures stockées, elles sont exécutées sur le serveur de la base de données et appelées depuis un client SQL. Les FDUdoivent renvoyer une valeur, elles sont habituellement utilisées dans la clause WHERE des requêtes SELECT. Cependant, uneFDU peut aussi s'appeler elle-même, ainsi qu'une procédure stockée.

Exemple

Considérez une fonction MAX_VALUE qui prend deux valeurs, <valeur1> et <valeur2>, et qui renvoie la plus grande d'entreelles. La FDU peut être exécutée dans une instruction SQL :

'SELECT * FROM PEOPLE WHERE MAX_VALUE(HEIGHT,5*WIDTH) < ?'

Ou, dans une instruction SQL CALL :

'?=CALL MAX_VALUE(?,?)'

Création de procédures stockées pour la plate-forme .NET

Cette section détaille comment créer des procédures stockées et des FDU Blackfish SQL pour les plates-formes .NET.

Création d'une procédure stockée pour une base de données Blackfish SQL

Trois étapes sont nécessaires à la création d'une procédure stockée Blackfish SQL :

1. Ecrivez le code de la procédure stockée en tant que membre public statique d'une classe.

2. Construisez un assemblage à partir des procédures stockées. Blackfish SQL doit pouvoir localiser l'assemblage. Si vous développez dans Delphi, Blackfish SQL peut trouver l'assemblage dans BDSCOMMONDIR. Il n'est donc pas nécessaire de placer l'assemblage à un endroit spécial. Pour le déploiement, nous vous recommandons de copier l'assemblage dans le

Blackfish SQL 7

44

7

Page 49: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

sous-répertoire où réside l'exécutable du serveur Blackfish SQL (BSQLServer.exe), ou de l'installer dans le GAC (Global Assembly Cache).

3. Créez la liaison entre un identificateur SQL et le membre de l'assemblage.

Exemple

Cet exemple utilise ADD_ORDER de l'exemple de la section précédente A propos des procédures stockées, avec le schémasuivant :

TABLE CUSTOMER

Champ Type Description

CUST_ID INT Identificateur du client

CREDIT DECIMAL(10,2) Montant du crédit accessible au client

NAME VARCHAR(80) Nom du client

TABLE ORDERS

Champ Type Description

CUST_ID INT Identificateur du client

ITEM_ID INT Identificateur de l'article

QUANTITY INT Nombre d'articles

SALE_AMOUNT DECIMAL(10,2) Montant total de l'achat

PAID DECIMAL(10,2) Montant payé

TABLE ITEMS

Champ Type Description

ITEM_ID INT Identificateur de l'article

NAME VARCHAR(60) Nom de l'article

PRICE DECIMAL(10,2) Prix unitaire

STOCK INT Nombre d'articles en stock

Etape 1 : Ecrivez le code de la procédure stockée.

1. Créez un package Delphi.NET et nommez-le MyProcs.dll.

2. Ajoutez une référence à System.Data.dll.

3. Ajoutez une unité :

P1 := Command.Parameters.Add('P1', DbType.Decimal);P2 := Command.Parameters.Add('P2', DbType.Int32); P1.Direction := ParameterDirection.Output; P2.Value := CustId; Command.ExecuteNonQuery; if P1.Value = DBNull.Value then Owed := 0 else

7 Blackfish SQL

45

7

Page 50: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Owed := Decimal(P1.Value); Owed := Owed + Amount; Command.Parameters.Clear; Command.CommandText := 'SELECT CREDIT INTO ? FROM CUSTOMER WHERE CUST_ID=?';P1 := Command.Parameters.Add('P1', DbType.Decimal);P2 := Command.Parameters.Add('P2', DbType.Int32); P1.Direction := ParameterDirection.Output; P2.Value := CustId; Command.ExecuteNonQuery; Credit := Decimal(P1.Value); if Owed > Credit then raise Exception.Create('Le client n'a pas suffisamment de crédit'); Command.Parameters.Clear; Command.CommandText := 'UPDATE ITEMS SET STOCK=STOCK-? WHERE ITEM_ID=?'; P1 := Command.Parameters.Add('P1', DbType.Int32); P2 := Command.Parameters.Add('P2', DbType.Int32); P1.Value := Quantity; P2.Value := ItemId; Command.ExecuteNonQuery; Command.Parameters.Clear; Command.CommandText := 'INSERT INTO ORDERS (CUST_ID, ITEM_ID, QUANTITY, SALE_AMOUNT) '+ 'VALUES (?, ?, ?, ?)'; P1 := Command.Parameters.Add('P1', DbType.Int32); P2 := Command.Parameters.Add('P2', DbType.Int32); P3 := Command.Parameters.Add('P3', DbType.Int32); P4 := Command.Parameters.Add('P4', DbType.Decimal); P1.Value := CustId;P2.Value := ItemId; P3.Value := Quantity;P4.Value := Amount;Command.ExecuteNonQuery; Command.Free;end; end.

Etape 2 : Construisez l'assemblage et rendez-le accessible au processus du serveur Blackfish SQL.

Après l'achèvement du code de la procédure stockée :

1. Construisez une DLL d'assemblage (par exemple, Procs.dll) contenant la classe MyClass de l'étape 1.

2. Lors du déploiement, copiez l'assemblage dans le sous-répertoire où réside l'exécutable du serveur Blackfish SQL (BSQLServer.exe).

Etape 3 : Créez la liaison entre un identificateur SQL et le membre de la classe.

Maintenant que le code est prêt pour l'exécution, la base de données Blackfish SQL doit être "avertie" de l'existence du membrede la classe appelable depuis SQL. Pour ce faire, démarrez DataExporer et exécutez la commande CREATE METHOD suivante :

CREATE METHOD ADD_ORDER AS 'MyProcs::SampleStoredProcedures.TMyClass.AddOrder';

Blackfish SQL 7

46

7

Page 51: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

MyProcs est le nom du package et le nom de la méthode est complet (nom de l'unité et nom de la classe).

Exécutez la procédure stockée ADD_ORDER depuis une application console Delphi :

unit MyCompany; interface implementationuses System.Data; type TSomething = class public procedure AddOrder( Connection: DbConnection; CustId: Integer; ItemId: Integer; Quantity: Integer); end; { Assume: Connection: est une connexion SQL Blackfish valide. CustId: est un client de la table CUSTOMER. ItemId: est un article de la table ITEMS. Quantity: est la quantité commandée de cet article. } procedure TSomething.AddOrder( Connection: DbConnection; CustId: Integer; ItemId: Integer; Quantity: Integer);var Command: DbCommand; P1, P2, P3: DbParameter;begin Command := con.CreateCommand; Command.CommandText := 'ADD_ORDER'; Command.CommandType := CommandType.StoredProcedure; P1 := Command.Parameters.Add('custId', DbType.Int32); P2 := Command.Parameters.Add('itemId', DbType.Int32); P3 := Command.Parameters.Add('quantity', DbType.Int32); P1.Value := CustId; P2.Value := ItemId; P3.Value := Quantity; Command.ExecuteNonQuery; Command.Free; end; end.

Lorsque TSomeThing.AddOrder est appelée dans l'application client, la procédure stockée ADD_ORDER est appelée à son touret cela entraîne l'exécution de TMyClass.AddOrder dans le processus du serveur Blackfish SQL. En plaçantTMyClass.AddOrder dans une procédure stockée, une seule instruction est exécutée via une connexion distante. Les cinqinstructions exécutées par TMyClass.AddOrder le sont dans le processus du serveur Blackfish SQL, en utilisant uneconnexion locale.

Notez que l'application ne transmet pas l'instance d'une connexion à l'appel de la procédure stockée ADD_ORDER. Seuls lesparamètres logiques réels sont transmis.

Blackfish SQL génère un objet de connexion implicite lorsqu'il trouve une procédure stockée, ou une FDU, dans laquelle lepremier argument attendu est une instance de System.Data.IDbConnection.

7 Blackfish SQL

47

7

Page 52: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Gestion des paramètres en sortie et des valeurs DBNull

La langage Delphi prend en charge les paramètres de sortie et les paramètres de référence. La base de données Blackfish SQLreconnaît ces types de paramètres et les traite en conséquence.

Les valeurs NULL de la base de données demandent une gestion spéciale. La System.String peut être gérée par la valeurNULL. Pour tous les autres types, cependant, le type du paramètre formel doit être modifié en TObject, puisque NULL n'estpas une valeur valide pour un ValueType .NET. Si le paramètre formel est de type TObject, la valeur de System.DBNull estutilisée pour une valeur NULL de la base de données. Blackfish SQL acceptera aussi des types nullables dans les procéduresstockées écrites en C# (par exemple, int).

Exemples :

Exemple d'une procédure stockée avec un paramètre INOUT ; les valeurs NULL sont ignorées :

class procedure TMyClass.AddFive(ref Param: Integer);begin Param := Param + 5; end;

Exemple d'une procédure stockée avec un paramètre INOUT ; les valeurs NULL sont stockées en tant que valeurs NULL :

class procedure TMyClass.AddFour(ref Param: TObject); begin if Param <> nil then Param := TObject(Integer(Param) + 4); end;

Utilisation :

procedure TryAdding(Connection: DbConnection); var Command: DbCommand;begin Command := Connection.CreateCommand; Command.CommandText := 'ADD_FIVE'; Command.CommandType := CommandType.StoredProcedure; P1 := Command.Parameters.Add('param', DbType.Int32); P1.Direction := ParameterDirection.InputOutput; P1.Value = 17; Command.ExecuteNonQuery; if 22 <> Integer(P1.Value) then raise Exception.Create('Résultat erroné'); Command.Parameters.Clear; Command.CommandText := 'ADD_FOUR'; Command.CommandType := CommandType.StoredProcedure; P1 := Command.Parameters.Add('param', DbType.Int32); P1.Direction := ParameterDirection.InputOutput; P1.Value = 17; Command.ExecuteNonQuery; if 21 <> Integer(P1.Value) then raise Exception.Create('Résultat erroné'); P1.Value = DBNull.Value; Command.ExecuteNonQuery; if DbNull.Value <> P1.Value then raise Exception.Create('Résultat erroné'); Command.Free;end;

L'implémentation précédente de AddFour utilise une classe enveloppe TObject pour les entiers. Cela permet au développeurde addFour de reconnaître les valeurs NULL transmises par Blackfish SQL, et de définir par NULL un paramètre de sortie quisoit reconnu par Blackfish SQL.

Blackfish SQL 7

48

7

Page 53: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Au contraire, dans l'implémentation de AddFive, il est impossible de savoir si un paramètre valait NULL, comme il estimpossible de définir par NULL le résultat du paramètre de sortie.

Extension de SQL pour la base de données Blackfish SQL

Si un opérateur (par exemple, l'opérateur sur les bits AND) est nécessaire à une clause where pour une raison quelconque, et siBlackfish SQL ne dispose pas de cet opérateur, vous pouvez en créer un dans Delphi, Visual Basic, C# ou C++, et l'appeler entant que FDU. Cependant, utilisez cette possibilité avec précaution car Blackfish SQL ne reconnaîtra pas l'objectif d'une tellefonction et ne pourra pas utiliser d'index pour accélérer cette partie de la requête.

Considérez l'exemple de FDU précédent, la FDU MAX_VALUE :

'SELECT * FROM PEOPLE WHERE MAX_VALUE(HEIGHT,5*WIDTH) < ?'

Cette requête est équivalente à celle qui suit :

'SELECT * FROM PEOPLE WHERE HEIGHT < ? AND 5*WIDTH < ?'

où la même valeur est donnée aux deux marqueurs de paramètres. Cette instruction SQL donne le même résultat, carl'implémentation de MAX_VALUE est connue. Cependant, Blackfish SQL ne pourra utiliser les index disponibles pour lescolonnes HEIGHT et WIDTH que dans la seconde requête. S'il n'y avait pas ces index, les performances des deux requêtesseraient semblables. L'avantage d'écrire une FDU apparaît lorsque la fonctionnalité n'existe pas encore dans Blackfish SQL (parexemple, l'opérateur sur les bits AND).

Débogage des procédures stockées .NET

Pour déboguer les procédures stockées .NET :

• Lorsque le protocole est en-processus ou non défini

• Lorsque le protocole est TCP

Débogage des procédures stockées lorsque le protocole est en-processus ou non défini

Pour déboguer des procédures stockées lorsque le protocole est en-processus ou non défini :

1. Créez le projet à utiliser pour le débogage. Dans votre EDI favori, créez un projet incluant le code client de l'application, les procédures stockées et une référence à la bibliothèque Borland.Data.BlackfishSQL.LocalClient.dll.

2. Ajoutez des points d'arrêt dans la ou les procédures stockées. Le débogueur gérera les procédures stockées de la même manière que le code client.

Débogage des procédures stockées lorsque le protocole est TCP

Pour déboguer des procédures stockées lorsque le protocole est TCP

Si votre EDI prend en charge le débogage distant :

Delphi pourra s'attacher au processus du serveur Blackfish SQL.

1. Compilez les procédures stockées avec les informations de débogage.

2. Copiez l'assemblage dans le répertoire bin de l'installation de Blackfish SQL.

3. Démarrez l'application client dans le débogueur et attachez-le au processus du serveur.

4. Ajoutez des points d'arrêt dans la ou les procédures stockées. Le débogueur gérera les procédures stockées de la même manière que le code client.

Si votre EDI ne prend pas en charge le débogage distant :

1. Créez le projet à utiliser pour le débogage. Configurez le projet pour déboguer le serveur directement.

7 Blackfish SQL

49

7

Page 54: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

2. Créez un exécutable appelant Borland.Data.DataStore.DataStoreServer.StartDefaultServer.

3. Ajoutez un point d'arrêt dans la procédure stockée.

4. Exécutez le processus client distinct.

Utilisation d'une procédure stockée pour produire un IDataReader ADO.NET

Une procédure stockée peut produire un DbDataReader ADO.NET simplement en renvoyant un DbDataReader.

Exemple

class function GetRiskyCustomers( Connection: DbConnection; Credit: Decimal credit): DbDataReader;var Command: DbCommand; P1: DbParameter;begin Command := Connection.CreateCommand; Command.CommandText := 'SELECT NAME FROM CUSTOMER WHERE CREDIT > ? '; P1 := Command.Parameters.Add('param', DbType.Decimal); P1.Value := Credit; Result := Command.ExecuteReader;end;

Remarquez que l'objet command n'est pas libéré à la fin de la méthode. Si la commande était libérée, cela fermeraitimplicitement le DbDataReader et aucune donnée ne serait renvoyée par la procédure stockée. A la place, Blackfish SQLferme la commande implicitement après que la procédure stockée a été appelée.

La procédure stockée GetRiskyCustomers peut être utilisée dans ADO de la manière suivante :

function GetRiskyCustomers( Connection: DbConnection): ArrayList; var Command: DbCommand; Reader: DbReader; List: ArrayList; begin List := ArrayList.Create; Command := Connection.CreateCommand; Command.CommandText := 'GETRISKYCUST'; Command.CommandType := CommandType.StoredProcedure; P1 := Command.Parameters.Add('Credit', DbType.Decimal); P1.Value := 2000; Reader := Command.ExecuteReader; while Reader.Read do List.Add(Reader.GetString(0)); Command.Free; Result := List;end;

Création de procédures stockées pour la plate-forme Java

Cette section détaille comment créer des procédures stockées et des FDU Blackfish SQL pour les plates-formes Java.

Création d'une procédure stockée pour une base de données Blackfish SQL

Les procédures stockées et les FDU pour Blackfish SQL pour Java doivent être écrites en Java. Les classes Java compilées desprocédures stockées et des FDU doivent être ajoutées au CLASSPATH du processus du serveur Blackfish SQL pour êtreutilisées. Cela donne à l'administrateur de la base de données une chance de contrôler le code qui est ajouté. Seules lesméthodes public static des classes public peuvent être utilisées.

Vous pouvez mettre à jour le chemin d'accès aux classes pour les outils de Blackfish SQL en ajoutant des classes au répertoire<home_jds>/lib/storedproc.

• Si la procédure stockée consiste en un fichier .jar, placez le fichier jar dans <home_jds>/storedproc/lib/jars.

Blackfish SQL 7

50

7

Page 55: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

• Si la procédure stockée consiste en un ou plusieurs fichiers de classes, placez les fichiers des classes dans <home_jds>/storedproc/classes. Par exemple, si votre fichier de procédure stockée est com.acme.MyProc, vous le placerez dans : c:<home_jds>/lib/storedproc/classes/com/acme/MyProc.class

Mise à la disposition du moteur SQL d'une procédure stockée ou d'une FDU

Une fois qu'une procédure stockée, ou qu'une FDU, a été écrite et ajoutée au CLASSPATH du processus du serveur BlackfishSQL, utilisez la syntaxe SQL suivante pour lui associer un nom de méthode :

CREATE JAVA_METHOD <nom-méthode> AS <chaîne-définition-méthode>

où <nom-méthode> est un identificateur SQL, comme INCREASE_SALARY, et <chaîne-définition-méthode> la chaînedu nom complet de la méthode. Par exemple :

com.mycompany.util.MyClass.increaseSalary

Les procédures stockées et les FDU peuvent être retirées de la base de données en exécutant :

DROP JAVA_METHOD <nom-méthode>

La méthode créée est prête à être utilisée. La section suivante explique comment définir et appeler une FDU.

Exemple de FDU

Cet exemple définit une méthode trouvant le premier caractère espace qui suit une certaine position dans une chaîne. Lepremier snippet SQL définit la FDU, le second est un exemple de la manière de l'utiliser.

Supposez que TABLE1 contienne deux colonnes VARCHAR : FIRST_NAME et LAST_NAME. La fonction CHAR_LENGTH est unefonction SQL intégrée.

package com.mycompany.util;public class MyClass { public static int findNextSpace(String str, int start) { return str.indexOf(' ',start); }} CREATE JAVA_METHOD FIND_NEXT_SPACE AS 'com.mycompany.util.MyClass.findNextSpace'; SELECT * FROM TABLE1 WHERE FIND_NEXT_SPACE(FIRST_NAME, CHAR_LENGTH(LAST_NAME)) < 0;

Paramètres en entrée

Une dernière vérification du type des paramètres est effectuée quand la méthode Java est appelée. Les types numériques sonttranstypés en un type supérieur afin de correspondre, si nécessaire, au type des paramètres d'une méthode Java. L'ordre destypes numériques Java est :

1. double ou Double

2. float ou Float

3. java.math.BigDecimal

4. long ou Long

5. int ou Integer

6. short ou Short

7. byte ou Byte

Les autres types Java reconnus sont :

7 Blackfish SQL

51

7

Page 56: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

• boolean ou Boolean

• String

• java.sql.Date

• java.sql.Time

• java.sql.Timestamp

• byte[]

• java.io.InputStream

Notez que, si vous passez des valeurs NULL à la méthode Java, vous ne pouvez pas utiliser de types primitifs comme short etdouble. Utilisez à la place les classes encapsulées équivalentes (Short, Double). Une valeur SQL NULL est transmise en tantque valeur Java null.

Si une méthode Java a un paramètre ou un tableau d'un type qui n'apparaît pas ci-dessus, il est géré comme le type SQLOBJECT.

Paramètres en sortie

Si le paramètre d'une méthode Java est un tableau d'un des types reconnus en entrée (sauf byte[]), il est considéré commeparamètre en sortie. Blackfish SQL transmet un tableau de longueur 1 (un) dans l'appel de la méthode, et la méthode est censéeremplir le premier élément du tableau avec la valeur en sortie. Les types Java reconnus pour les paramètres en sortie sont :

• double[] ou Double[]

• float[] ou Float[]

• java.math.BigDecimal[]

• long[] ou Long[]

• int[] ou Integer[]

• short[] ou Short[]

• Byte[]  (mais pas byte[], car il est reconnu en lui-même comme étant un paramètre en entrée)

• boolean[] ou Boolean[]

• String[]

• java.sql.Date[]

• java.sql.Time[]

• java.sql.Timestamp[]

• byte[][]

• java.io.InputStream[]

Les paramètres en sortie ne peuvent être liés qu'avec des marqueurs de variables en SQL. Tous les paramètres en sortie sontessentiellement des paramètres INOUT, car toute valeur définie avant l'exécution de l'instruction est transmise à la méthodeJava. Si vous ne saisissez aucune valeur, la valeur initiale est arbitraire. Si l'un des paramètres peut renvoyer un NULL SQL (ouavoir une valeur correcte NULL en entrée), utilisez les classes encapsulées au lieu des types primitifs.

Exemple

package com.mycompany.util;public class MyClass { public static void max(int i1, int i2, int i3, int result[]) { result[0] = Math.max(i1, Math.max(i2,i3)); } } CREATE JAVA_METHOD MAX

Blackfish SQL 7

52

7

Page 57: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

AS 'com.mycompany.util.MyClass.max'; CALL MAX(1,2,3,?);

L'instruction CALL doit être préparée par une instruction CallableStatement pour récupérer la valeur en sortie. Voir dans ladocumentation JDBC la façon d'utiliser java.sql.CallableStatement. Remarquez l'assignation de result[0] dans laméthode Java. Le tableau transmis à la méthode contient exactement un élément.

Paramètres de connexion implicites

Si le premier paramètre d'une méthode Java est de type java.sql.Connection, Blackfish SQL transmet un objet connexionqui partage le contexte de connexion transactionnel utilisé pour appeler la procédure stockée. Cet objet connexion peut servir àexécuter des instructions SQL en utilisant l'API JDBC.

Ne transmettez RIEN pour ce paramètre. Laissez Blackfish SQL le faire.

Exemple

package com.mycompany.util;public class MyClass { public static void increaseSalary(java.sql.Connection con, java.math.BigDecimal amount) { java.sql.PreparedStatement stmt = con.prepareStatement("UPDATE EMPLOYEE SET SALARY=SALARY+?"); stmt.setBigDecimal(1,amount); stmt.executeUpdate(); stmt.close(); }} CREATE JAVA_METHOD INCREASE_SALARY AS 'com.mycompany.util.MyClass.increaseSalary'; CALL INCREASE_SALARY(20000.00);

Remarque :

• INCREASE_SALARY n'a besoin que d'un seul paramètre : la quantité dont il faut augmenter les salaires. La méthode Java correspondante a deux paramètres.

• N'appelez pas commit(), rollback(), setAutoCommit(), ni close() dans l'objet connexion transmis à la procédure stockée. Pour des raisons de performances, il n'est pas recommandé d'utiliser cette caractéristique pour une FDU, même si c'est possible.

Procédures stockées et ResultSet JDBC

Une procédure stockée Java peut produire un ResultSet sur le client en renvoyant soit un ResultSet, soit un DataSetDataExpress à partir de l'implémentation Java de la procédure stockée. Le DataSet est automatiquement converti enResultSet pour l'utilisateur de la procédure stockée.

Exemple

L'exemple suivant renvoie un ResultSet :

package com.mycompany.util; public class MyClass { public static void getMarriedEmployees(java.sql.Connection con) java.sql.Statement stmt = con.getStatement(); java.sql.ResultSet rset = stmt.executeQuery("SELECT ID, NAME FROM EMPLOYEE WHERE SPOUSE IS NOT NULL"); return rset;

7 Blackfish SQL

53

7

Page 58: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

}

Remarque : Ne fermez pas l'instruction stmt. Cette instruction est fermée implicitement.

Exemple

L'exemple suivant renvoie un DataSet, qui est automatiquement converti en ResultSet :

package com.mycompany.util; public class MyClass { public static void getMarriedEmployees() com.borland.dx.dataset.DataSet dataSet = getDataSetFromSomeWhere(); return dataSet;}

Remarque : Ne fermez pas l'instruction stmt. Cette instruction est fermée implicitement.

Exemple

Recensez et appelez les exemples précédents comme ceci :

java.sql.Statement stmt = connection.getStatement();stmt.executeUpdate("CREATE JAVA_METHOD GET_MARRIED_EMPLOYEES AS "+ "'com.mycompany.util.MyClass.getMarriedEmployees'");java.sql.ResultSet rset = stmt.executeQuery("CALL GET_MARRIED_EMPLOYEES()");int id = rset.getInt(1);String name = rset.getString(2);

Signatures de méthodes surchargées

Les méthodes Java peuvent être surchargées afin d'éviter toute perte de précision numérique.

Exemple

package com.mycompany.util;public class MyClass { public static int abs(int p) { return Math.abs(p); } public static long abs(long p) { return Math.abs(p); } public static BigDecimal abs(java.math.BigDecimal p) { return p.abs(); } public static double abs(double p) { return Math.abs(p); }} CREATE JAVA_METHOD ABS_NUMBER AS 'com.mycompany.util.MyClass.abs'; SELECT * FROM TABLE1 WHERE ABS(NUMBER1) = 2.1434;

La méthode surchargée abs est recensée une seule fois dans le moteur SQL. Maintenant, imaginez que la méthode absattendant un BigDecimal n'ait pas été implémentée. Si NUMBER1 est un NUMERIC comportant des décimales, la méthode absprenant un double sera appelée, ce qui représente une perte de précision potentielle lors de la conversion du nombreBigDecimal en double.

Blackfish SQL 7

54

7

Page 59: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Mappage des types renvoyés

La valeur renvoyée par la méthode est mappée sur un type SQL équivalent. Voici le tableau de mappage des types :

Type renvoyé par la méthode Type SQL de Blackfish SQL

byte ou Byte SMALLINT

short ou Short SMALLINT

int ou Integer INT

long ou Long BIGINT

java.math.BigDecimal DECIMAL

float ou Float REAL

double ou Double DOUBLE

String VARCHAR

boolean ou Boolean BOOLEAN

java.io.InputStream (Tout type dérivé de java.io.InputStream est géré en tant queINPUTSTREAM)

INPUTSTREAM

java.sql.Date DATE

java.sql.Time TIME

java.sql.Timestamp TIMESTAMP

Tous les autres types OBJECT

Voir aussi

Préface ( see page 1)

Présentation ( see page 3)

Architecture du système ( see page 7)

Etablissement des connexions ( see page 25)

Administration de Blackfish SQL ( see page 33)

Utilisation de la sécurité de Blackfish SQL ( see page 37)

Utilisation des déclencheurs dans les tables Blackfish SQL ( see page 57)

Référence des procédures stockées ( see page 61)

Référence SQL ( see page 77)

Optimisation des applications Blackfish SQL ( see page 127)

Déploiement des applications de bases de données Blackfish SQL ( see page 135)

Dépannage ( see page 139)

7 Blackfish SQL

55

7

Page 60: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier
Page 61: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

8 Utilisation des déclencheurs dans les tables Blackfish SQL

Ce chapitre traite des déclencheurs et des tables Blackfish SQL.

• A propos des déclencheurs

• Visualisation des déclencheurs

• Création des déclencheurs dans les bases de données Blackfish SQL pour Windows

• Création des déclencheurs dans les bases de données Blackfish SQL pour Java

A propos des déclencheurs

Vous pouvez créer des déclencheurs de niveau ligne dans une table Blackfish SQL. Pour Blackfish SQL pour Java, vous pouvezles implémenter en Java. Pour Blackfish SQL pour Windows, vous pouvez les implémenter dans Delphi, C# ou VB.NET.

Toutes les méthodes déclencheur doivent être déclarées comme static et prennent un unique paramètre de typeTriggerContext. La sémantique de la classe TriggerContext est la même dans Blackfish SQL pour Java et dans BlackfishSQL pour Windows. Il existe cependant des différences syntaxiques entre les deux plates-formes : Sur la plate-forme Windows,la classe TriggerContext appartient à l'espace de nommage Borland.Data.DataStore. Sur la plate-forme Java, la classeTriggerContext appartient au package com.borland.datastore.

Le contexte du déclencheur peut servir à accéder à :

• Un objet connexion

• La nouvelle ligne pour les déclencheurs d'insertion ou de mise à jour

• L'ancienne ligne pour les déclencheurs de mise à jour ou de suppression

Les règles suivantes sont appliquées :

• Les valeurs de la nouvelle ligne sont modifiées dans un déclencheur BEFORE UPDATE ou BEFORE INSERT.

• Les valeurs de l'ancienne ligne ne peuvent pas être modifiées.

• Les contraintes liées aux clés étrangères et primaires sont appliquées après les déclencheurs BEFORE.

• Les déclencheurs AFTER sont appelés après la fin de l'opération, celle-ci incluant l'application réussie des contraintes de clés étrangères et primaires .

• L'implémentation des déclencheurs doit éviter les opérations DML sur une même table. En effet, cela peut amener à une

8 Blackfish SQL

57

8

Page 62: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

récursivité infinie.

• S'il existe plusieurs déclencheurs de même type pour la même table, l'ordre des appels des déclencheurs est l'ordre dans lequel ils ont été créés.

• Les opérations de validation (commit) et d'annulation (rollback) sont ignorées au sein de l'exécution du déclencheur si une exception est lancée de l'intérieur d'un déclencheur. Les effets de l'instruction ayant provoqué l'exécution du déclencheur seront annulés par rollback.

Les exigences quant au déploiement des applications implémentant des déclencheurs sont celles des procédures stockées.

Visualisation des déclencheurs

Pour voir les déclencheurs créés pour une table, appelez la procédure stockée DB_ADMIN.GET_TRIGGERS. Pour unedescription complète, voir la Référence des procédures stockées.

Création des déclencheurs dans les bases de données Blackfish SQL pour Windows

Utilisez l'instruction CREATE TRIGGER pour créer un déclencheur dans une base de données Blackfish SQL pour Windows. Voirdans la Référence SQL la syntaxe de l'instruction CREATE TRIGGER et des exemples.

Exemple

Ces instructions exemple créent des déclencheurs pour la classe Customer :

CREATE TRIGGER BEFORE_INSERT_CUSTOMER BEFORE INSERT ON CUSTOMER AS OrderEntryAssembly::OrderEntry.Customer.beforeInsertTriggerCREATE TRIGGER BEFORE_UPDATE_CUSTOMER BEFORE UPDATE ON CUSTOMER AS OrderEntryAssembly::OrderEntry.Customer.beforeUpdateTriggerCREATE TRIGGER BEFORE_DELETE_CUSTOMER BEFORE DELETE ON CUSTOMER AS OrderEntryAssembly::OrderEntry.Customer.beforeDeleteTrigger CREATE TRIGGER AFTER_INSERT_CUSTOMER AFTER INSERT ON CUSTOMER AS OrderEntryAssembly::OrderEntry.Customer.afterInsertTriggerCREATE TRIGGER AFTER_UPDATE_CUSTOMER AFTER UPDATE ON CUSTOMER AS OrderEntryAssembly::OrderEntry.Customer.afterUpdateTriggerCREATE TRIGGER AFTER_DELETE_CUSTOMER AFTER DELETE ON CUSTOMER AS OrderEntryAssembly::OrderEntry.Customer.afterDeleteTrigger

Voici l'implémentation Delphi des déclencheurs pour la classe Customer :

TCustomer = class class procedure BeforeInsertTrigger(Context: TriggerContext); static; class procedure BeforeUpdateTrigger(Context: TriggerContext); static; class procedure BeforeDeleteTrigger(Context: TriggerContext); static; class procedure AfterInsertTrigger(Context: TriggerContext); static; class procedure AfterUpdateTrigger(Context: TriggerContext); static; class procedure AfterDeleteTrigger(Context: TriggerContext); static;end; { TCustomer } class procedure TCustomer.AfterDeleteTrigger(Context: TriggerContext); begin HandleBeforeInsert(Context.GetNewRow()); end; class procedure TCustomer.AfterInsertTrigger(Context: TriggerContext); begin HandleBeforeUpdate(Context.GetOldRow(), Context.GetNewRow()); end; class procedure TCustomer.AfterUpdateTrigger(Context: TriggerContext); begin HandleBeforeDelete(Context.GetOldRow(), Context.GetNewRow()); end; class procedure TCustomer.BeforeDeleteTrigger(Context: TriggerContext); begin HandleAfterInsert(Context.getNewRow()); end; class procedure TCustomer.BeforeInsertTrigger(Context: TriggerContext);

Blackfish SQL 8

58

8

Page 63: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

begin HandleAfterUpdate(Context.getNewRow()); end; class procedure TCustomer.BeforeUpdateTrigger(Context: TriggerContext); begin HandleAfterDelete(Context.getNewRow()); end;

Voici l'implémentation C# des déclencheurs pour la classe Customer :

public class Customer { public static void BeforeInsertTrigger(TriggerContext Context) { HandleBeforeInsert(Context.GetNewRow()); } public static void BeforeUpdateTrigger(TriggerContext Context) { HandleBeforeUpdate(Context.GetOldRow(), Context.GetNewRow()); } public static void beforeDeleteTrigger(TriggerContext Context) { HandleBeforeDelete(Context.getNewRow()); } public static void afterInsertTrigger(TriggerContext Context) { HandleAfterInsert(Context.getNewRow()); } public static void afterUpdateTrigger(TriggerContext Context) { HandleAfterUpdate(Context.getNewRow()); } public static void afterDeleteTrigger(TriggerContext Context) { HandleAfterDelete(Context.getNewRow()); }}

Création des déclencheurs dans les bases de données Blackfish SQL pour Java

Utilisez l'instruction CREATE TRIGGER pour créer un déclencheur dans une base de données Blackfish SQL pour Java. Voirdans la Référence SQL la syntaxe de l'instruction CREATE TRIGGER et des exemples.

Exemples :

Ces instructions exemple créent des déclencheurs pour la classe Customer :

CREATE TRIGGER BEFORE_INSERT_CUSTOMER BEFORE INSERT ON CUSTOMER AS orderentry.Customer.beforeInsertTriggerCREATE TRIGGER BEFORE_UPDATE_CUSTOMER BEFORE UPDATE ON CUSTOMER AS orderentry.Customer.beforeUpdateTriggerCREATE TRIGGER BEFORE_DELETE_CUSTOMER BEFORE DELETE ON CUSTOMER AS orderentry.Customer.beforeDeleteTrigger CREATE TRIGGER AFTER_INSERT_CUSTOMER AFTER INSERT ON CUSTOMER AS orderentry.Customer.afterInsertTriggerCREATE TRIGGER AFTER_UPDATE_CUSTOMER AFTER UPDATE ON CUSTOMER AS orderentry.Customer.afterUpdateTriggerCREATE TRIGGER AFTER_DELETE_CUSTOMER AFTER DELETE ON CUSTOMER AS orderentry.Customer.afterDeleteTrigger

Voici l'implémentation Java des déclencheurs pour la classe Customer :

public class Customer { public static void beforeInsertTrigger(TriggerContext context) throws Exception { handleBeforeInsert(context.getNewRow()); }

8 Blackfish SQL

59

8

Page 64: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

public static void beforeUpdateTrigger(TriggerContext context) throws Exception { handleBeforeUpdate(context.getOldRow(), context.getNewRow()); } public static void beforeDeleteTrigger(TriggerContext context) throws Exception { handleBeforeDelete(context.getOldRow(), context.getNewRow()); } public static void afterInsertTrigger(TriggerContext context) { handleAfterInsert(context.getNewRow()); } public static void afterUpdateTrigger(TriggerContext context) { handleAfterUpdate(context.getNewRow()); } public static void afterDeleteTrigger(TriggerContext context) { handleAfterDelete(context.getNewRow()); } }

Voir aussi

Préface ( see page 1)

Présentation ( see page 3)

Architecture du système ( see page 7)

Etablissement des connexions ( see page 25)

Administration de Blackfish SQL ( see page 33)

Utilisation de la sécurité de Blackfish SQL ( see page 37)

Utilisation des procédures stockées et des fonctions définies par l'utilisateur ( see page 43)

Référence des procédures stockées ( see page 61)

Référence SQL ( see page 77)

Optimisation des applications Blackfish SQL ( see page 127)

Déploiement des applications de bases de données Blackfish SQL ( see page 135)

Dépannage ( see page 139)

Blackfish SQL 8

60

8

Page 65: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

9 Référence des procédures stockées

De nombreuses tâches administratives sont prises en charge par les procédures stockées de la classe DB_ADMIN. La classeDB_UTIL fournit des procédures stockées pour les opérations sur les nombres, les chaînes et les dates/heures.

• Procédures stockées DB_ADMIN

• Procédures stockées DB_UTIL pour les nombres, les chaînes et les dates/heures

Procédures stockées DB_ADMIN

DB_ADMIN est un groupe de procédures stockées permettant d'effectuer diverses tâches d'administration sur la base dedonnées. Par exemple :

• Visualisation des métadonnées

• Modification du basculement automatique et de la sauvegarde incrémentielle

• Modification des propriétés de la base de données

• Vérification des tables

• Copie de la base de données à des fins de sauvegarde

• Chiffrement de la base de données

• Modification du mot de passe de la base de données

• Affichage de l'état de la base de données, comme suit :

• Verrous

• Identificateurs des historiques des états

Ces méthodes peuvent être appelées depuis SQL par l'instruction CALL. Elles peuvent être appelées sans création d'aliasMETHOD car Blackfish SQL reconnaît les méthodes de DB_ADMIN comme des méthodes intégrées.

Méthodes DB_ADMIN

Les sections suivantes donnent la syntaxe et une brève description de toutes les méthodes DB_ADMIN.

ALTER_DATABASE

ALTER_DATABASE(string propriétés)

Modifie les propriétés spécifiées de la base de données. propriétés est une liste de valeurs, séparées par des virgules,correspondant aux colonnes de la classe DatabaseColumns. Chaque propriété est spécifiée comme suit :

9 Blackfish SQL

61

9

Page 66: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

<NOM_COLONNE>=<VALEUR>. Voir dans l'aide en ligne les informations concernant la classe DatabaseColumns.

ALTER_MIRROR

ALTER_MIRROR(string nomMiroir, string propriétés)

Modifie la configuration d'un miroir existant. nomMiroir est une valeur de la colonne SysMirrors.NAME. propriétés estune liste des valeurs, séparées par des virgules, correspondant aux colonnes de la classe SysMirrors. Chaque propriété estspécifiée comme suit : <NOM_COLONNE>=<VALEUR>. Voir dans l'aide en ligne les informations concernant la classeSysMirrors.

ALTER_MIRROR_SCHEDULE

ALTER_MIRROR_SCHEDULE(INT32 idMiroir, string propriétés)

Modifie un élément du calendrier de synchronisation d'un miroir existant. nomMiroir est une valeur de la colonneSysMirrorSchedule.NAME. propriétés est une liste des valeurs, séparées par des virgules, correspondant aux colonnesde la classe SysMirrorSchedule. Chaque propriété est spécifiée comme suit : <NOM_COLONNE>=<VALEUR>. Voir dans l'aideen ligne les informations concernant la classe SysMirrorSchedule.

CHANGE_PASSWORD

CHANGE_PASSWORD(string ancienMotdepasse, string nouveauMotdepasse)

Modifie le mot de passe de l'utilisateur connecté.

CLOSE_CONNECTION

CLOSE_CONNECTION(INT32 idConnexion, INT64 naissanceMillisecondes)

Ferme une connexion ouverte. Peut servir à fermer des connexions non nécessaires. idConnexion provient de la colonne IDrenvoyée par GET_CONNECTIONS. naissanceMillisecondes provient de la colonne BIRTH renvoyée parGET_CONNECTIONS. Renvoie true en cas de réussite Voir GET_CONNECTIONS pour obtenir la tables de connexions à fermer.

CLOSE_OTHER_CONNECTIONS

CLOSE_OTHER_CONNECTIONS()

Ferme toutes les autres connexions ouvertes. Les droits d'administrateur sont nécessaires pour exécuter cette méthode.

COPY_STREAMS

COPY_STREAMS(string nomAutreFichier, string utilisateurAdmin, string passeAdmin, booleanécraser, boolean ignorerErreurs)

Copie toutes les tables et tous les index de la base de données en cours dans une autre base de données. La méthodeCOPY_USERS doit être appelée auparavant si des utilisateurs ont été ajoutés à la base de données. nomAutreFichier est lenom de fichier de la base de données cible. utilisateurAdmin est l'utilisateur ayant les droits ADMIN sur la base de donnéescible. passeAdmin est le mot de passe de l'utilisateur ADMIN pour la base la base de données cible. écraser permetd'écraser les tables. Si la valeur est false, une erreur apparaît. ignorerErreurs permet d'ignorer les erreurs lors de larécupération d'une base de données endommagée.

COPY_USERS

COPY_USERS(string nomAutreFichier, string utilisateurAdmin, string passeAdmin, boolean

copierChiffrement, boolean remplacerUtilisateursExistants)

Copie tous les utilisateurs de la base de données en cours dans une autre base de données qui est spécifiée.nomAutreFichier est le nom de fichier de la base de données cible. utilisateurAdmin est l'utilisateur ayant les droitsADMIN sur la base de données cible. passeAdmin est le mot de passe de l'utilisateur ADMIN pour la base la base de données

Blackfish SQL 9

62

9

Page 67: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

cible. copierChiffrement chiffre la base cible en utilisant la même clé si la base en cours est chiffrée.remplacerExistingUsers remplace les utilisateurs existant dans la base de données cible si la valeur est true.

CREATE_MIRROR

CREATE_MIRROR(string propriétés)

Crée un nouveau miroir en utilisant les propriétés de configuration spécifiées. propriétés est une liste de valeurs, séparéespar des virgules, correspondant aux colonnes de la classe SysMirrors. Chaque propriété est spécifiée comme suit :<NOM_COLONNE>=<VALEUR>. Renvoie un ID unique pour le nouveau miroir. Voir dans l'aide en ligne les informationsconcernant la classe SysMirrors.

CREATE_MIRROR_SCHEDULE

CREATE_MIRROR_SCHEDULE(string nomMiroir, string propriétés)

Crée un nouveau calendrier de synchronisation d'un miroir. nomMiroir est le miroir auquel sera ajouté l'élément de calendrier.propriétés est une liste des valeurs, séparées par des virgules, à attribuer aux colonnes de la classe SysMirrorSchedule.Chaque propriété est définie comme suit : <NOM_COLONNE>=<VALEUR>. Renvoie un identificateur INT64 unique pour le nouvelélément de calendrier. Voir dans l'aide en ligne les informations concernant la classe SysMirrorSchedule.

DROP_MIRROR

DROP_MIRROR(string nomMiroir)

Efface la configuration d'un miroir existant. nomMiroir est une valeur de la colonne SysMirrors.NAME. Voir dans l'aide enligne les informations concernant la classe SysMirrors.

DROP_MIRROR_SCHEDULE

DROP_MIRROR_SCHEDULE(INT32 idMiroir)

Efface un élément du calendrier de synchronisation d'un miroir existant. idMiroir est une valeur de la colonneSysMirrorSchedule.ID. Voir dans l'aide en ligne les informations concernant la classe SysMirrorSchedule.

ENCRYPT

ENCRYPT(string passeAdmin, string germeCléMaître)

Chiffre une base de données vide. passeAdmin est le mot de passe de l'utilisateur exécutant la commande. germeCléMaîtreest une séquence aléatoire de 16 caractères utilisée en interne comme mot de passe maître. Une fois fournie, elle n'est plusnécessaire à l'accès à la base de données. Ce doit être une séquence de caractères vraiment aléatoire.

GET_ALL_LICENCES

GET_ALL_LICENCES( )

Renvoie une table de résultats, de zéro ou plusieurs lignes, contenant toutes les licences ayant pu être trouvées. Les colonnesde cette table de résultats sont définies dans la classe LicenseColumns. Voir dans l'aide en ligne les informations concernantla classe LicenseColumns.

GET_COLUMN_PRIVILEGES

GET_COLUMN_PRIVILEGES(string modèleCatalogue, string modèleSchéma, string modèleTable, string

modèleColonne)

modèleCatalogue spécifie le modèle LIKE de recherche des catalogues. Non utilisé. Réservé à un usage ultérieur.modèleSchéma spécifie le modèle LIKE de recherche des schémas. null signifie que le nom de schéma ne sert pas à limiterla recherche. modèleTable spécifie le modèle LIKE de recherche des tables. null signifie que le nom de table ne sert pas àlimiter la recherche. modèleColonne spécifie le modèle LIKE de recherche des colonnes. null signifie que le nom de colonne

9 Blackfish SQL

63

9

Page 68: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

ne sert pas à limiter la recherche. Renvoie une table de résultats contenant les droits d'accès aux colonnes pour la ou les tablesspécifiées. Les colonnes de la table de résultats sont définies dans la classe ColumnPrivilegeColumns. Voir dans l'aide enligne les informations concernant la classe ColumnPrivilegeColumns.

GET_COLUMNS

GET_COLUMNS(string modèleCatalogue, string modèleSchéma, string modèleTable, string

modèleColonne)

modèleCatalogue spécifie le modèle LIKE de recherche des catalogues. Non utilisé. Réservé à un usage ultérieur.modèleSchéma spécifie le modèle LIKE de recherche des schémas. null signifie que le nom de schéma ne sert pas à limiterla recherche. modèleTable spécifie le modèle LIKE de recherche des tables. null signifie que le nom de table ne sert pas àlimiter la recherche. modèleColonne spécifie le modèle LIKE de recherche des colonnes. null signifie que le nom de colonnene sert pas à limiter la recherche. Renvoie une table de résultats contenant les métadonnées de colonnes pour la ou les tablesspécifiées. Les colonnes de la table de résultats sont définies dans la classe ColumnsColumns. Voir dans l'aide en ligne lesinformations concernant la classe ColumnsColumns.

GET_CONNECTIONS

GET_CONNECTIONS()

Renvoie une table de résultats contenant les connexions ouvertes sur le serveur connecté. Les colonnes de la table de résultatssont définies dans la classe ConColumns. Voir dans l'aide en ligne les informations concernant la classe ConColumns.

GET_DATABASE_PRIVILEGES

GET_DATABASE_PRIVILEGES(boolean pourRôles)

Si pourRôles vaut true, le receveur est un rôle ; s'il vaut false, le receveur est un utilisateur.

Renvoie une table de résultats contenant les droits d'accès à la base de données, pour chaque utilisateur ou pour chaque rôle,dans les colonnes suivantes :

1. GRANTOR String => le donneur de l'accès

2. GRANTEE String => le receveur de l'accès

3. PRIVILEGE String => nom de l'accès (STARTUP, ADMINISTRATOR, WRITE, CREATE, DROP, RENAME, CREATE_ROLES, CREATE_SCHEMAS)

4. IS_GRANTABLE String => YES si le receveur est autorisé à accorder cet élément à d'autres ; NO s'il ne l'est pas

GET_DATABASE_PRODUCT_NAME

GET_DATABASE_PRODUCT_NAME()

Renvoie le nom de produit du serveur sous forme d'une chaîne.

GET_DATABASE_PRODUCT_VERSION

GET_DATABASE_PRODUCT_VERSION()

Renvoie la version du produit du serveur sous forme d'une chaîne.

GET_DATABASE_PROPS

GET_DATABASE_PROPS()

Renvoie une table de résultats contenant les propriétés de la base de données en cours. Les colonnes de la table de résultatssont définies dans la classe DatabaseColumns. Voir dans l'aide en ligne les informations concernant la classeDatabaseColumns.

Blackfish SQL 9

64

9

Page 69: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

GET_DATABASE_STATUS

GET_DATABASE_STATUS()

Renvoie une table de résultats contenant une ligne d'informations sur l'état de la base de données en cours. Les colonnes de latable de résultats sont définies dans la classe DatabaseStatusTable. Voir dans l'aide en ligne les informations concernant laclasse DatabaseStatusTable.

GET_DATABASE_STATUS_LOG_FILTER

GET_DATABASE_STATUS_LOG_FILTER()

Renvoie le filtre INT32 déterminant le type des informations de connexion consignées dans le fichier historique pour toutes lesconnexions à la base de données en cours. La signification des masques de bits est définie dans la classe LogFilterCodes.Voir dans l'aide en ligne les informations concernant la classe LogFilterCodes.

GET_DATATYPES

GET_DATATYPES()

Renvoie une table de résultats contenant une ligne pour chacun des types de données pris en charge par le serveur de la basede données. Les colonnes de la table de résultats sont définies dans la classe DataTypesColumns. Voir dans l'aide en ligneles informations concernant la classe DataTypesColumns.

GET_FOREIGN_KEYS

GET_FOREIGN_KEYS(modèleCatalogue, modèleSchéma, modèleTable)

modèleCatalogue spécifie le modèle LIKE de recherche des catalogues. Non utilisé. Réservé à un usage ultérieur.modèleSchéma spécifie le modèle LIKE de recherche des schémas. null signifie que le nom de schéma ne sert pas à limiterla recherche. modèleTable spécifie le modèle LIKE de recherche des tables. null signifie que le nom de table ne sert pas àlimiter la recherche. Renvoie une table de résultats contenant une ligne pour chacune des clés étrangères de la ou des tablesspécifiées. Les colonnes de la table de résultats sont définies dans la classe ForeignKeyColumnsColumns. Voir dans l'aideen ligne les informations concernant la classe ForeignKeyColumnsColumns.

GET_FOREIGN_KEY_COLUMNS

GET_FOREIGN_KEY_COLUMNS(string modèleCatalogue, string modèleSchéma, string modèleTable,string modèleCléEtrangère, string modèleCataloguePrimaire, string modèleSchémaPrimaire, string

modèleTablePrimaire, string modèleIndexPrimaire)

modèleCatalogue spécifie le modèle LIKE de recherche des catalogues. Non utilisé. Réservé à un usage ultérieur.modèleSchéma spécifie le modèle LIKE de recherche des schémas. null signifie que le nom de schéma ne sert pas à limiterla recherche. modèleTable spécifie le modèle LIKE de recherche des tables. null signifie que le nom de table ne sert pas àlimiter la recherche. modèleCléEtrangère spécifie le modèle LIKE de recherche des clés étrangères. null signifie que lenom de table ne sert pas à limiter la recherche. modèleCataloguePrimaire spécifie le modèle LIKE de recherche descatalogues primaires. Non utilisé. Réservé à un usage ultérieur. modèleSchémaPrimaire spécifie le modèle LIKE derecherche des schémas primaires. null signifie que le nom de schéma primaire ne sert pas à limiter la recherche.modèleTablePrimaire spécifie le modèle LIKE de recherche des tables primaires. null signifie que le nom de table ne sertpas à limiter la recherche. modèleIndexPrimaire spécifie le modèle LIKE de recherche des index de tables primaires. nullsignifie que le nom de table ne sert pas à limiter la recherche. Renvoie une table de résultats contenant une ligne pour chacunedes paires de colonnes utilisées comme clés étrangères pour la ou les tables spécifiées. Les colonnes de la table de résultatssont définies dans la classe ForeignKeyColumns. Voir dans l'aide en ligne les informations concernant la classeForeignKeyColumns.

9 Blackfish SQL

65

9

Page 70: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

GET_INDEXES

GET_INDEXES(string modèleCatalogue, string modèleSchéma, string modèleTable)

modèleCatalogue spécifie le modèle LIKE de recherche des catalogues. Non utilisé. Réservé à un usage ultérieur.modèleSchéma spécifie le modèle LIKE de recherche des schémas. null signifie que le nom de schéma ne sert pas à limiterla recherche. modèleTable spécifie le modèle LIKE de recherche des tables. null signifie que le nom de table ne sert pas àlimiter la recherche. Renvoie une table de résultats contenant les index de la ou des tables spécifiées. Les colonnes de la tablede résultats sont définies dans la classe IndexesColumns. Voir dans l'aide en ligne les informations concernant la classeIndexesColumns.

GET_INDEX_COLUMNS

GET_INDEX_COLUMNS(string modèleCatalogue, string modèleSchéma, string modèleTable, string

modèleIndex)

modèleCatalogue spécifie le modèle LIKE de recherche des catalogues. Non utilisé. Réservé à un usage ultérieur.modèleSchéma spécifie le modèle LIKE de recherche des schémas. null signifie que le nom de schéma ne sert pas à limiterla recherche. modèleTable spécifie le modèle LIKE de recherche des tables. null signifie que le nom de table ne sert pas àlimiter la recherche. modèleIndex spécifie le modèle LIKE de recherche des index. null signifie que le nom de table ne sertpas à limiter la recherche. Renvoie une table de résultats contenant des informations sur les colonnes du ou des index de la oudes tables spécifiées. Les colonnes de la table de résultats sont définies dans la classe IndexColumnsColumns. Voir dansl'aide en ligne les informations concernant la classe IndexColumnsColumns.

GET_KEYWORDS

GET_KEYWORDS()

Renvoie une table de résultats contenant les mots réservés de la base de données en cours.

GET_LICENSE

GET_LICENSE()

Renvoie une table de résultats contenant une ligne d'informations sur la meilleure licence de déploiement ayant été trouvée. Lescolonnes de cette table de résultats sont définies dans la classe LicenseColumns. Voir dans l'aide en ligne les informationsconcernant la classe LicenseColumns.

GET_LICENSE_SEARCH_DIRS

GET_LICENSE_SEARCH_DIRS()

Renvoie une table de résultats contenant une ligne pour chacun des répertoires où sont recherchés les fichiers de licence.

GET_LOCKS

GET_LOCKS()

Renvoie une table de résultats contenant tous les verrous en cours, sur les tables et sur les lignes, pour toutes les connexions àla base de données en cours. Les colonnes de la table de résultats sont définies dans la classe LockColumns. Voir dans l'aideen ligne les informations concernant la classe LockColumns.

GET_MIRROR_ID

GET_MIRROR_ID()

Renvoie l'INT64 de l'ID du miroir en cours, si c'est un miroir.

Blackfish SQL 9

66

9

Page 71: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

GET_MIRRORS

GET_MIRRORS(nomMiroir, vérifierEtat)

nomMiroir est le nom du miroir, ou peut contenir null pour toucher tous les miroirs. vérifierEtat peut contenir TRUE pourfournir des colonnes supplémentaires sur l'état du miroir. La vérification de l'état nécessite un traitement plus lourd, mais donneplus d'information sur les miroirs.

Renvoie une table de résultats contenant une ligne pour chacun des miroirs. Les colonnes de la table de résultats sont définiesdans la classe MirrorStatusColumns. Voir dans l'aide en ligne les informations concernant la classeMirrorStatusColumns.

GET_NEWEST_STATUS_LOG_ID

GET_NEWEST_STATUS_LOG_ID()

Renvoie l'INT32 de l'identificateur du fichier historique le plus récent pouvant être récupéré avec la méthodeGET_STATUS_LOG().

GET_OLDEST_STATUS_LOG_ID

GET_OLDEST_STATUS_LOG_ID()

Renvoie l'INT32 de l'identificateur du fichier historique le plus ancien pouvant être récupéré avec la méthodeGET_STATUS_LOG().

GET_PROCEDURES

GET_PROCEDURES(string modèleCatalogue, string modèleSchéma, string modèleProcédure, string

typeProcédure)

modèleCatalogue spécifie le modèle LIKE de recherche des catalogues. Non utilisé. Réservé à un usage ultérieur.modèleSchéma spécifie le modèle LIKE de recherche des schémas. null signifie que le nom de schéma ne sert pas à limiterla recherche. modèleProcédure spécifie le modèle LIKE de recherche des procédures. null signifie que le nom deprocédure ne sert pas à limiter la recherche. typeProcédure est un type de procédure ; ce peut être PROCEDURE,FUNCTION, ou null pour obtenir tous les types de procédures. Renvoie une table de résultats contenant les métadonnéespour les procédures stockées découvertes. Les colonnes de la table de résultats sont définies dans la classeProcedureColumns. Voir dans l'aide en ligne les informations concernant la classe ProcedureColumns.

GET_PROCEDURE_COLUMNS

GET_PROCEDURE_COLUMNS(string modèleCatalogue, string modèleSchéma, string modèleProcédure,

string modèleParamètre)

modèleCatalogue spécifie le modèle LIKE de recherche des catalogues. Non utilisé. Réservé à un usage ultérieur.modèleSchéma spécifie le modèle LIKE de recherche des schémas. null signifie que le nom de schéma ne sert pas à limiterla recherche. modèleProcédure spécifie le modèle LIKE de recherche des procédures. null signifie que le nom deprocédure ne sert pas à limiter la recherche. modèleColonne spécifie le modèle LIKE de recherche des colonnes. nullsignifie que le nom de colonne ne sert pas à limiter la recherche. Renvoie une table de résultats contenant les paramètres de laou des procédures spécifiées. Les colonnes de la table de résultats sont définies dans la classeProcedureParametersColumns. Voir dans l'aide en ligne les informations concernant la classeProcedureParametersColumns.

GET_PROCEDURE_PRIVILEGES

GET_PROCEDURE_PRIVILEGES() Renvoie une table de résultats contenant la description des droits d'accès à chaqueprocédure. La table de résultats a les colonnes suivantes :

9 Blackfish SQL

67

9

Page 72: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

1. PROCEDURE_CAT String => catalogue de la procédure (toujours null)

2. PROCEDURE_SCHEM String => schéma de la procédure

3. PROCEDURE_NAME String => nom de la procédure

4. GRANTOR String => le donneur de l'accès

5. GRANTEE String => le receveur de l'accès

6. PRIVILEGE String => nom de l'accès (EXECUTE)

7. IS_GRANTABLE String => YES si le receveur est autorisé à accorder cet élément à d'autres ; NO s'il ne l'est pas

GET_ROLES

GET_ROLES()

Renvoie une table de résultats contenant les rôles définis pour la base de données en cours. Les colonnes de la table derésultats sont définies dans la classe RolesColumns. Voir dans l'aide en ligne les informations concernant la classeRolesColumns.

GET_ROLE_GRANTS

GET_ROLE_GRANTS(boolean pourRôles)

Si pourRôles vaut true, le receveur est un rôle ; s'il vaut false, le receveur est un utilisateur.

La table de résultats a les colonnes suivantes :

1. ROLE_NAME String => nom du rôle accordé

2. GRANTOR String => le donneur du rôle

3. GRANTEE String => le receveur du rôle

4. IS_GRANTABLE String => YES si le receveur est autorisé à accorder cet élément à d'autres ; NO s'il ne l'est pas

GET_SCHEMAS

GET_SCHEMAS(string modèleCatalogue)

modèleCatalogue spécifie le modèle LIKE de recherche des catalogues. Non utilisé. Réservé à un usage ultérieur. Renvoieune table de résultats contenant les schémas de la base de données.

GET_STATUS_LOG_FILTER

GET_STATUS_LOG_FILTER()

Renvoie le filtre INT32 déterminant le type des informations de connexion consignées dans le fichier historique des états pourcette connexion. La signification des masques de bits est définie dans la classe LogFilterCodes. Voir dans l'aide en ligne lesinformations concernant la classe LogFilterCodes.

GET_STATUS_LOG

GET_STATUS_LOG(INT32 id_log, INT64 décalage)

id_log est l'ID du fichier historique. décalage est le décalage dans le fichier historique par rapport au début du fichier.Renvoie l'historique des états pour la base de données en cours sous forme de flux.

GET_STATUS_LOGS

GET_STATUS_LOGS()

Blackfish SQL 9

68

9

Page 73: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Renvoie une table de résultats contenant les ID des historiques existants pour la base de données en cours. Les colonnes de latable de résultats sont définies dans la classe StatusLogColumns. Voir dans l'aide en ligne les informations concernant laclasse StatusLogColumns.

GET_TABLE_PRIVILEGES

GET_TABLE_PRIVILEGES(string modèleCatalogue, string modèleSchéma, string modèleTable)

modèleCatalogue spécifie le modèle LIKE de recherche des catalogues. Non utilisé. Réservé à un usage ultérieur.modèleSchéma spécifie le modèle LIKE de recherche des schémas. null signifie que le nom de schéma ne sert pas à limiterla recherche. modèleTable spécifie le modèle LIKE de recherche des tables. null signifie que le nom de table ne sert pas àlimiter la recherche. Renvoie une table de résultats contenant les descriptions des droits d'accès à la ou aux tablessélectionnées. Les colonnes de la table de résultats sont définies dans la classe TablePrivilegeColumns. Voir dans l'aideen ligne les informations concernant la classe TablePrivilegeColumns.

GET_TABLES

GET_TABLES(string modèleCatalogue, string modèleSchéma, string modèleTable, string type)

modèleCatalogue spécifie le modèle LIKE de recherche des catalogues. Non utilisé. Réservé à un usage ultérieur.modèleSchéma spécifie le modèle LIKE de recherche des schémas. null signifie que le nom de schéma ne sert pas à limiterla recherche. modèleTable spécifie le modèle LIKE de recherche des tables. null signifie que le nom de table ne sert pas àlimiter la recherche. type est une liste de types séparés par des virgules, composée de TABLE, VIEW, SYSTEM_TABLE, ou denull. Renvoie une table de résultats contenant les métadonnées pour la ou les tables spécifiées. Les colonnes de la table derésultats sont définies dans la classe TableColumns. Voir dans l'aide en ligne les informations concernant la classeTableColumns.

GET_THIS_MIRROR

GET_THIS_MIRROR(boolean vérifierEtat) vérifierEtat peut contenir TRUE pour fournir des colonnessupplémentaires sur l'état du miroir. Identique à GET_MIRRORS, mais la procédure renvoie des informations pour le seul miroirqu'elle cible. Renvoie une table de résultats contenant une ligne pour ce miroir. Les colonnes de la table de résultats sontdéfinies dans la classe MirrorStatusColumns. Voir dans l'aide en ligne les informations concernant la classeMirrorStatusColumns.

GET_TRIGGERS

GET_TRIGGERS(string modèleCatalogue, string modèleSchéma, string modèleTable, string

modèleDéclencheur)

modèleCatalogue spécifie le modèle LIKE de recherche des catalogues. Non utilisé. Réservé à un usage ultérieur.modèleSchéma spécifie le modèle LIKE de recherche des schémas. null signifie que le nom de schéma ne sert pas à limiterla recherche. modèleTable spécifie le modèle LIKE de recherche des tables. null signifie que le nom de table ne sert pas àlimiter la recherche. modèleDéclencheur spécifie le modèle LIKE de recherche des déclencheurs. null signifie que le nomde déclencheur ne sert pas à limiter la recherche. Renvoie une table de résultats contenant les déclencheurs de la ou des tablesspécifiées.

La table de résultats a les colonnes suivantes :

1. TRIGGER_CAT String => catalogue du déclencheur (toujours null)

2. TRIGGER_SCHEM String => schéma du déclencheur

3. TRIGGER_TABLE String => table du déclencheur

4. TRIGGER_TYPE String => type du déclencheur

5. TRIGGER_METHOD String => nom de la méthode du déclencheur

9 Blackfish SQL

69

9

Page 74: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

GET_USERS

GET_USERS()

Renvoie une table de résultats contenant les utilisateurs de la base de données.

GET_VIEWS

GET_VIEWS(string modèleCatalogue, string modèleSchéma, string modèleVue)

modèleCatalogue spécifie le modèle LIKE de recherche des catalogues. Non utilisé. Réservé à un usage ultérieur.modèleSchéma spécifie le modèle LIKE de recherche des schémas. null signifie que le nom de schéma ne sert pas à limiterla recherche. modèleVue spécifie le modèle LIKE de recherche des vues. null signifie que le nom de vue ne sert pas à limiterla recherche. Renvoie une table de résultats contenant les définitions de la ou des vues spécifiées. Les colonnes de la table derésultats sont définies dans la classe ViewsColumns. Voir dans l'aide en ligne les informations concernant la classeViewsColumns.

SET_DATABASE_STATUS_LOG_FILTER

SET_DATABASE_STATUS_LOG_FILTER(INT32 filtre)

Définit le filtre déterminant le type des informations de connexion consignées dans le fichier historique des états pour toutes lesconnexions à la base de données en cours.

SET_PRIMARY_MIRROR

SET_PRIMARY_MIRROR(INT64 délaiFinTx, boolean forcerFinTx, boolean forcerChangement)

Définit le miroir en cours comme miroir primaire. délaiFinTx est le nombre de millisecondes pendant lesquelles sera attenduela fin des transactions existantes. forcerFinTx provoque l'abandon des transactions existantes après le nombre demillisecondes spécifié dans délaiFinTx. forcerChangement transforme le miroir en cours en miroir primaire même sid'autres miroirs ne pourront pas être synchronisés après ce changement.

SET_STATUS_LOG_FILTER

SET_STATUS_LOG_FILTER(INT32 filtre)

Définit le filtre déterminant le type des informations de connexion consignées dans le fichier historique des états pour laconnexion en cours.

SYNCH_MIRROR

SYNCH_MIRROR(string nomMiroir)

Met à jour, si nécessaire, le miroir spécifié par nomMiroir avec les fichiers historiques les plus récents de son miroir de mise àjour.

VALIDATE_PRIMARY_MIRROR

VALIDATE_PRIMARY_MIRROR()

Valide un miroir primaire en vue de son utilisation par les transactions exécutant des opérations d'écriture.

VERIFY

VERIFY(string modèleCatalogue, string modèleSchéma, string modèleTable, INT32

optionsAffichage, INT32 compteErreurs, out INT32 erreursRencontrées, out String sortie)

Vérifie une ou plusieurs tables de la base de données. modèleCatalogue spécifie le modèle LIKE de recherche descatalogues. Non utilisé. Réservé à un usage ultérieur. modèleSchéma spécifie le modèle LIKE de recherche des schémas.

Blackfish SQL 9

70

9

Page 75: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

null signifie que le nom de schéma ne sert pas à limiter la recherche. modèleTable spécifie le modèle LIKE de recherchedes tables. null signifie que le nom de table ne sert pas à limiter la recherche. optionsAffichage représente un ouplusieurs des bits de StreamVerifierDisplay, soumis à une opération OR, qui commandent au vérificateur d'afficher lesmessages de progression de la vérification du flux. compteErreurs spécifie le nombre d'erreurs pouvant être ignorées avant ledéclenchement d'une exception. erreursRencontrées est un paramètre de sortie renvoyant le nombre d'erreurs rencontrées.sortie est un paramètre de sortie pouvant servir à renvoyer la chaîne de diagnostic issue du vérificateur.

VERIFY

VERIFY(string modèleTable, INT32 optionsAffichage, INT32 compteErreurs, out INT32

erreursRencontrées, out String sortie)

Vérifie une ou plusieurs tables de la base de données. modèleTable spécifie le modèle LIKE de recherche des tables. nullsignifie que le nom de table ne sert pas à limiter la recherche. optionsAffichage représente un ou plusieurs des bits deStreamVerifierDisplay, soumis à une opération OR, qui commandent au vérificateur d'afficher les messages deprogression de la vérification du flux. compteErreurs spécifie le nombre d'erreurs pouvant être ignorées avant ledéclenchement d'une exception. erreursRencontrées est un paramètre de sortie renvoyant le nombre d'erreurs rencontrées.sortie est un paramètre de sortie pouvant servir à renvoyer la chaîne de diagnostic issue du vérificateur.

DB_UTIL : Fonctions numériques, chaîne et date/heure

DB_UTIL est un ensemble de procédures stockées SQL opérant sur les numériques, les chaînes, les dates et les heuresstockés dans les tables de la base de données. Ces fonctions sont implémentées en tant que FDU Java dans DB_UTIL.

Exemples

L'instruction suivante calcule la racine carrée de la colonne COL1 :

SELECT DB_UTIL.SQRT(COL1) FROM TABLE1;

L'instruction suivante calcule les dates/heures égales à la date/heure de COL2 plus cinq heures.

SELECT DB_UTIL.TIMESTAMPADD('SQL_TSI_HOUR',5,COL2) FROM TABLE1;

Fonctions numériques

ACOS

ACOS(expression)

Renvoie l'arc cosinus en radians d'un nombre.

ASIN

ASIN(expression)

Renvoie l'arc sinus en radians d'un nombre.

ATAN

ATAN(expression)

Renvoie l'arc tangente en radians d'un nombre.

ATAN2

ATAN2(y, x)

Renvoie l'arc tangente du quotient des deux arguments. L'angle renvoyé est une valeur numérique en radians comprise entre

9 Blackfish SQL

71

9

Page 76: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

+PI et -PI et représente l'angle en sens inverse des aiguilles d'une montre entre l'axe des X positifs et le point (x, y). Remarquezque la valeur y est transmise en premier.

CEILING

CEILING(expression)

Renvoie le plus petit entier supérieur ou égal à l'argument. La valeur renvoyée a le même type que la valeur entrée.

COS

COS(expression)

Renvoie le cosinus d'un angle.

COT

COT(expression)

Renvoie la cotangente d'un angle.

DEGREES

DEGREES(expression)

Convertit en degrés un angle en radians.

EXP

EXP(expression)

Renvoie la valeur exponentielle de expression.

FLOOR

FLOOR(expression)

Renvoie le plus grand entier inférieur ou égal à expression. La valeur renvoyée a le même type que la valeur entrée.

LOG

LOG(expression)

Renvoie le logarithme naturel d'un nombre.

LOG10

LOG10(expression)

Renvoie le logarithme à base 10 d'un nombre.

MOD

MOD(expression1, expression2)

Renvoie le reste de la division de expression1 par expression2, où les deux expressions s'évaluent en un entier de type SHORT,INT ou LONG. La valeur renvoyée a le même type que la valeur entrée.

PI

PI()

Renvoie la constante PI.

Blackfish SQL 9

72

9

Page 77: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

POWER

POWER(expression1, expression2)

Renvoie la valeur de expression1 à la puissance expression2.

RADIANS

RADIANS(expression)

Convertit en radians un angle en degrés.

RAND

RAND()

Génère un nombre aléatoire à virgule flottante.

RAND

RAND(expression)

Génère un nombre aléatoire à virgule flottante en utilisant expression comme germe entier.

ROUND

ROUND(expression1, expression2)

Arrondit expression1 à expression2 décimales.

SIGN

SIGN(expression)

Renvoie -l si expression est négative, zéro si expression vaut zéro et 1 si expression est positive. La valeur renvoyée a le mêmetype que la valeur entrée.

SIN

SIN(expression)

Renvoie le sinus en radians d'un angle.

SQRT

SQRT(expression)

Renvoie la racine carrée d'un nombre.

TAN

TAN(expression)

Renvoie la tangente d'un angle exprimé en radians.

TRUNCATE

TRUNCATE(expression1, expression2)

Tronque la valeur de expression1 à expression2 décimales.

9 Blackfish SQL

73

9

Page 78: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Fonctions chaîne

ASCII

ASCII(chaîne)

Renvoie un entier représentant le code ASCII du caractère le plus à gauche de chaîne.

TO_CHAR

TO_CHAR(code_ascii)

Renvoie l'équivalent sous forme de char de l'argument code_ascii.

DIFFERENCE

DIFFERENCE(chaîne1, chaîne2)

Renvoie un entier compris entre 0 et 4 indiquant combien des 4 chiffres renvoyés par la fonction SOUNDEX pour chaîne1 sontidentiques à ceux renvoyés pour chaîne2. Une valeur renvoyée de 4 indique que les codes SOUNDEX sont identiques.

INSERT_STRING

INSERT_STRING(chaîne1, début, longueur, chaîne2)

Renvoie une chaîne de caractères formée en supprimant longueur caractères de chaîne1 en commençant à début, puis eninsérant chaîne2 dans chaîne1 à la position début.

LEFT_STRING

LEFT_STRING(chaîne, n)

Renvoie les n caractères les plus à gauche de chaîne.

REPEAT

REPEAT(chaîne, n)

Renvoie une chaîne de caractères formée en répétant n fois la chaîne chaîne.

REPLACE

REPLACE (chaîne1, chaîne2, chaîne3)

Renvoie une chaîne de caractères formée en remplaçant toutes les occurrences de chaîne2 dans chaîne1 par chaîne3.

RIGHT

RIGHT_STRING(chaîne, n)

Renvoie une chaîne de caractères formée en prenant n caractères à droite dans chaîne.

SOUNDEX

SOUNDEX (chaîne)

Renvoie une chaîne représentant le son des mots de la chaîne ; la valeur renvoyée dépend de la source de données et peut êtreun code SOUNDEX à 4 chiffres, une représentation phonétique de chaque mot, ou une autre forme.

Blackfish SQL 9

74

9

Page 79: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

SPACE

SPACE(n)

renvoie une chaîne de caractères constituée de n espaces.

Fonctions date et heure

DAYNAME

DAYNAME(date)

Renvoie une chaîne représentant le jour de la semaine de la date spécifiée.

DAYOFWEEK

DAYOFWEEK(date)

Renvoie un nombre représentant le jour de la semaine : 1=Dimanche, 7=Samedi.

DAYOFYEAR

DAYOFYEAR(date)

Renvoie un nombre représentant le jour de l'année : 1=1er janvier.

MONTHNAME

MONTHNAME(date)

Renvoie une chaîne représentant le mois de la date spécifiée.

QUARTER

QUARTER(date)

Renvoie un nombre représentant le trimestre de la date spécifiée : 1=janvier à mars, 2=avril à juin.

TIMESTAMPADD

TIMESTAMPADD(intervalle, n, estampille)

Renvoie une valeur date/heure calculée en ajoutant n intervalles à estampille.

intervalle peut être l'une des valeurs suivantes et doit être entouré d'apostrophes : SQL_TSI_FRAC_SECOND,SQL_TSI_SECOND, SQL_TSI_MINUTE, SQL_TSI_HOUR, SQL_TSI_DAY, SQL_TSI_WEEK, SQL_TSI_MONTH,SQL_TSI_QUARTER ou SQL_TSI_YEAR.

estampille peut être de l'un des types de données SQL suivants : DATE, TIME, TIMESTAMP.

TIMESTAMPDIFF

TIMESTAMPDIFF(intervalle, estampille1, estampille2)

Renvoie un nombre représentant le nombre d'intervalles dont estampille2 est supérieur à estampille1.

intervalle peut être l'une des valeurs suivantes et doit être entouré d'apostrophes : SQL_TSI_FRAC_SECOND,SQL_TSI_SECOND, SQL_TSI_MINUTE, SQL_TSI_HOUR, SQL_TSI_DAY, SQL_TSI_WEEK, SQL_TSI_MONTH,SQL_TSI_QUARTER ou SQL_TSI_YEAR.

estampille1 et estampille2 peuvent être de l'un des types de données SQL suivants : DATE, TIME, TIMESTAMP.

9 Blackfish SQL

75

9

Page 80: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

WEEK

WEEK(date)

Renvoie un entier compris entre 1 et 53 représentant la semaine de l'année de date. 1=la première semaine de l'année.

Voir aussi

Préface ( see page 1)

Présentation ( see page 3)

Architecture du système ( see page 7)

Etablissement des connexions ( see page 25)

Administration de Blackfish SQL ( see page 33)

Utilisation de la sécurité de Blackfish SQL ( see page 37)

Utilisation des procédures stockées et des fonctions définies par l'utilisateur ( see page 43)

Utilisation des déclencheurs dans les tables Blackfish SQL ( see page 57)

Référence SQL ( see page 77)

Optimisation des applications Blackfish SQL ( see page 127)

Déploiement des applications de bases de données Blackfish SQL ( see page 135)

Dépannage ( see page 139)

Blackfish SQL 9

76

9

Page 81: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

10 Référence SQL

La Référence SQL comprend les rubriques suivantes :

Types de données

Littéraux Mots clés

Identificateurs Syntaxe des listes

Expressions Prédicats

Fonctions Expressions de tables

Instructions Instructions de définition des données

Instructions de contrôle des transactions Instructions de manipulation des données

Instructions de sécurité Séquences d'échappement

Fonctions d'échappement ISQL

Types de données

En SQL, les types de données peuvent être spécifiés en utilisant des noms Blackfish SQL, ou des synonymes plus portablesdans d'autres dialectes SQL. Le tableau suivant fait la liste des types de données SQL de Blackfish SQL et donne leurséquivalents Java. Voir Administration de Blackfish SQL pour la description de chaque type de données.

Les chaînes sont stockées au format de caractères UNICODE. Cependant, si une chaîne ne contient aucun bit de poids fort, lesoctets hauts ne sont pas enregistrés et le nombre d'octets est égal au nombre de caractères. Dans les langues sur deux octetstelles que le Japonais, le nombre d'octets est égal au double du nombre de caractères.

REMARQUE : Le mot "inline" fait référence à la partie qui, dans les données du champ, est stockée dans la ligne de la table.Quand la valeur inline maximale est dépassée, les données en surplus sont stockées dans un flux séparé sous forme de blob.

Types de données SQL pris en charge par Blackfish SQL

Le tableau suivant décrit les types données SQL pris en charge par Blackfish SQL :

Type de données Equivalents SQL 1

Octet 8 bits TINYINT BYTE

Entier 16 bits SMALLINT SHORT

10 Blackfish SQL

77

10

Page 82: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Entier 32 bits INT INTEGER

Entier 64 bits BIGINT LONG

Nombre décimal exact DECIMAL(p,d) BIGDECIMAL(p,d)

Virgule flottante 64 bits FLOAT(p), p=24 à 52 FLOAT DOUBLE DOUBLE PRECISION

Virgule flottante 32 bits REAL FLOAT(p), p=1 à 23

Chaîne Unicode VARCHAR(p,m) STRING(p,m)

Tableau d'octets VARBINARY(p,m) BINARY(p,m) INPUTSTREAM(p,m)

Objet sérialisable OBJECT(t,m)

Booléen BOOLEAN BIT

Date DATE

Heure TIME

Timestamp TIMESTAMP

1 Dans la colonne "Equivalents SQL", les formes les plus portables sont signalées en gras.

Exemples

VARCHAR(30,10) Chaîne d'une longueur maximale de 30 octets ; les 10 premiers octets sont conservés inline,le surplus va dans un blob (flux séparé pour grands objets)

VARCHAR(30) Chaîne d'une longueur maximale de 30 octets, tous conservés inline parce que la précisionest inférieure à la valeur inline par défaut de 64

VARCHAR Chaîne sans longueur maximale ; les 64 premiers octets sont stockés inline, le surplus vadans un blob (flux séparé pour grands objets)

DECIMAL(5,2) BigDecimal d'une précision minimale de 5 et d'exactement 2 décimales

DECIMAL(4) BigDecimal d'une précision minimale de 4 et d'exactement 0 décimale

DECIMAL BigDecimal d'un espace minimal pour 72 chiffres significatifs et d'exactement 0 décimale

OBJECT Objet Java sérialisable

OBJECT('java.math.BigInteger') Objet Java sérialisable qui doit être composé d'objets java.math.BigInteger

Littéraux

Le tableau suivant énumère les types des valeurs littérales scalaires supportés :

Type de données de Blackfish SQL

Exemples Description 

SMALLINT INTBIGINT

8 Données de type nombre entier

DECIMAL(p,d) 2, 15,7 ,9233 Numérique exact ; peut contenir une virgule décimale

REAL DOUBLEFLOAT(p)

8E0 4E3 0,3E26,2E-72

Numérique approché : nombre suivi de la lettre E, suivie d'un entier signé facultatif

VARCHAR(p,m) 'Bonjour' 'De l''air' Chaîne : doit être mise entre apostrophes. Le caractère apostrophe est représentépar deux apostrophes consécutives

VARBINARY(p,m) B'1011001' X'F08A'X'f777'

Séquence binaire ou hexadécimale mise entre apostrophes et précédée de la lettreB (binaire) ou X (hexadécimal)

BOOLEAN TRUE FALSE  

Blackfish SQL 10

78

10

Page 83: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

DATE DATE '2002-06-17' Affiche la date locale de l'origine ; le format est DATE 'aaaa-mm-jj'

TIME TIME '15:46:55' Affiche l'heure locale ; le format est TIME 'hh:mm:ss', sur 24 heures

TIMESTAMP TIMESTAMP'2001-12-31 13:15:45' 

Affiche la date locale de l'affichage ; le format est TIMESTAMP aaaa-mm-jjhh:mm:ss'

REMARQUE : Il n'existe pas d'objet littéral dans Blackfish SQL.

Mots clés

Les deux listes ci-après montrent tous les mots clés utilisés par Blackfish SQL. Les mots de la première liste sont réservés et nepeuvent être utilisés comme identificateurs SQL que s'ils sont entre guillemets. Les mots clés de la deuxième liste ne sont pasréservés et peuvent être utilisés avec ou sans guillemets.

Notez que les mots clés SQL-92 ne sont pas tous considérés comme mots clés par le moteur SQL de Blackfish SQL. Pour uneportabilité maximale, n'utilisez pas d'identificateurs traités comme mots clés par un dialecte SQL.

Mots clés Blackfish SQL réservés

Les mots de cette liste sont des mots clés réservés. Ils ne peuvent être utilisés comme identificateurs SQL que s'ils sont entreguillemets. Lorsqu'ils sont entre guillemets, ils distinguent les majuscules des minuscules.

ABSOLUTE ACTION ADDADMIN ADMINISTRATOR ALLALTER AND ANY AS ASCAUTHORIZATIONAUTOINCREMENT AVGBETWEEN BIT BIT_LENGTHBOTH BY CALL CASCADECASE CAST CHARCHAR_LENGTH CHARACTERCHARACTER_LENGTHCHECK COALESCE COLUMNCONSTRAINT COUNTCREATE CROSSCURRENT_DATE

CURRENT_ROLECURRENT_TIMECURRENT_TIMESTAMPCURRENT_USER DATEDECIMAL DEFAULT DELETEDESC DISTINCT DOUBLEDROP ELSE END ESCAPEEXCEPT EXECUTE EXISTSEXTRACT FALSE FLOATFOR FOREIGN FROM FULLGRANT GROUP HAVING ININDEX INNER INSERT INTINTEGER INTERSECT

INTO IS ISOLATION JOINKEY LEADING LEFT LEVELLIKE LOWER MAX MINNATURAL NO NONE NOTNULL NULLIF NUMERICOCTET_LENGTH ON ONLYOPTION OR ORDEROUTER POSITIONPRECISION PRIMARYPRIVILEGES PUBLIC REALREFERENCES RENAMERESOLVABLE

RESTRICT REVOKE RIGHTSCHEMA SELECT SETSMALLINT SOME SQRTSTARTUP SUBSTRINGSUM TABLE THEN TIMETIMESTAMP TO TRAILINGTRANSACTION TRIMTRUE UNION UNIQUEUNKNOWN UPDATEUPPER USER USINGVALUES VARCHARVARYING VIEW WHENWHERE WITH

Mots clés Blackfish SQL non réservés

Les mots clés de cette liste ne sont pas réservés. Ils peuvent être utilisés comme identificateurs SQL entre guillemets ou non.Quand ils sont utilisés sans guillemets, ils ne distinguent pas les majuscules des minuscules et sont interprétés comme s'ilsétaient entièrement en majuscules par l'analyseur SQL. Lorsqu'ils sont entre guillemets, ils distinguent les majuscules desminuscules.

ABS AUTOCOMMITBOOLEAN BIGDECIMALBIGINT BINARY BYTECASEINSENSITIVE CLASSCOMMIT COMMITTEDCONCAT CONVERTCURDATE CURTIME D DAY

DAYOFMONTH DEC FNGRANTED HOUR IFNULLINPUTSTREAM METHODLCASE LENGTH LOCATELOCK LONG LONGINTLONGVARBINARYLONGVARCHAR LTRIM

METHOD MINUTEMONTH NOW NOWAITOBJECT OFF OJPASSWORD READREPEATABLE ROLEROLLBACK RTRIMSECOND SERIALIZABLE

SHORT STRING TTIMESTAMPADDTIMESTAMPDIFFTIMEZONEHOURTIMEZONEMINUTE TINYINTTS TYPE UCASEUNCOMMITTED VARBINARYWORK WRITE YEAR

Identificateurs

Les identificateurs SQL non mis entre apostrophes ne font pas la distinction majuscules/minuscules et sont traités comme étant

10 Blackfish SQL

79

10

Page 84: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

en majuscules. Un identificateur peut être mis entre guillemets, il fait alors la distinction majuscules/minuscules. Un identificateurnon mis entre guillemets doit suivre ces règles :

• Le premier caractère doit être une lettre reconnue par la classe java.lang.Character.

• Chaque caractère suivant doit être une lettre, un chiffre, un trait de soulignement (_) ou un signe dollar ($).

• Les mots clés ne peuvent pas être utilisés comme identificateurs.

Les identificateurs entre apostrophes peuvent contenir n'importe quelle chaîne de caractères incluant des espaces, dessymboles et des mots clés. Exemples

Identificateurs corrects :

Identificateur Description

Client Traité comme CLIENT

Laisser-passer Traité comme LAISSER-PASSER

"Hansen" Traité comme Hansen

" "  Traité comme un espace unique

Identificateurs incorrects :

Identificateur Problème

_ordre Doit commencer par un caractère

date date est un mot clé réservé

borland.com Les points ne sont pas autorisés

Les formes de la liste suivante représentent le même identificateur et seront toutes traitées comme LAST_NAME :

• last_name

• Last_Name

• lAsT_nAmE

• "LAST_NAME"

Syntaxe des listes

Dans la section suivante, vous trouverez des noms d'éléments, contenant les mots "liste" ou "liste à virgules", qui ne sont pasdéfinis. Par exemple :

<liste à virgules d'éléments de sélection><liste de contraintes de colonnes>

Ces noms représentent des listes, contenant au moins un élément et utilisant une virgule pour séparer deux éléments successifsdans le cas des listes à virgules :

<liste à virgules d'éléments de sélection> ::=    <élément de sélection> [ , <élément de sélection> ] * <liste de contraintes de colonne> ::=    <contrainte de colonnes> [ <contrainte de colonne> ] *

Expressions

Les expressions sont utilisées dans tout le langage SQL. Elles contiennent plusieurs opérateurs infixe et quelques opérateurspréfixe. La priorité de l'opérateur, de la plus élevée à la plus faible, est la suivante :

• préfixe + -

• infixe * /

Blackfish SQL 10

80

10

Page 85: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

• infixe + - ||

• infix = <> < > <= >=

• préfixe NOT

• infixe AND

• infixe OR

Syntaxe

<expression> ::=      <expression scalaire>    | <expression conditionnelle><expression scalaire> ::=      <expression scalaire> {+ | - | * | / | <concat> }          <expression scalaire>    | {+ | -} <expression scalaire>    | ( <expression> )    | ( <expression de table> )    | <référence de colonne>    | <référence de fonction définie par l'utilisateur>    | <littéral>    | <fonction d'agrégation>    | <fonction>    | <marqueur de paramètre >

Pour avoir la liste des fonctions prises en charge par Blackfish SQL, voir Fonctions.

<expression conditionnelle> ::=      <expression conditionnelle> OR <expression conditionnelle>    | <expression conditionnelle> AND <expression conditionnelle>    | NOT <expression conditionnelle>    | <expression scalaire> <opérateur de comparaison> <expression scalaire>    | <expression scalaire> <opérateur de comparaison> { ANY | SOME | ALL }         (<expression de table>)    | <expression scalaire> [NOT] BETWEEN <expression scalaire>    | <expression scalaire> [NOT] LIKE <expression scalaire>         [ ESCAPE <expression scalaire> ]    | <expression scalaire> [NOT] IS { NULL | TRUE | FALSE | UNKNOWN }    | <expression scalaire> IN ( <liste à virgules d'expressions scalaires> )    | <expression scalaire> IN ( <expression de table> )    | EXISTS ( <expression de table> )<opérateur de comparaison> ::=      = | <> | < | > | <= | >=<concat> ::=   ||<expression de table> ::=      <expression de table> UNION [ ALL ] <expression de table>    | <expression de table> EXCEPT [ ALL ] <expression de table>    | <expression de table> INTERSECT [ ALL ] <expression de table>    | <expression de jointure>    | <expression de sélection>    | ( <expression de table> )<fonction d'agrégation> ::=      <nom d'opérateur d'agrégation> ( <expression> )    | COUNT ( * )                                                        <nom d'opérateur d'agrégation> ::=      AVG    | SUM    | MIN    | MAX    | COUNT<référence de colonne> ::=  [ <qualificateur de table> . ] <nom de colonne> <référence de fonction définie par l'utilisateur> ::=     <nom de méthode> ([ <liste à virgules d'expressions> ])

10 Blackfish SQL

81

10

Page 86: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

                                                        <qualificateur de table> ::=      <nom de table> | <nom de corrélation>                                                        <nom de corrélation> ::=  <identificateur SQL>

Exemples

L'instruction suivante sélectionne la valeur résultant de la multiplication du prix (Price) par la quantité (Amount) dans la tableOrders, afin de provisionner les commandes de janvier :

SELECT Amount * Price FROM Orders     WHERE CustId = ? AND EXTRACT(MONTH FROM Ordered) = 1;

L'instruction suivante obtient des données en utilisant une sous-requête scalaire :

SELECT Name, (SELECT JobName FROM Job WHERE Id=Person.JobId)     FROM Person;

Notez qu'une erreur est générée si la sous-requête renvoie plus d'une ligne.

Prédicats

Les prédicats suivants, utilisés dans des expressions conditionnelles, sont pris en charge.

BETWEEN

Le prédicat BETWEEN définit un intervalle inclusif de valeurs. Le résultat de :

expr BETWEEN exprGauche AND exprDroite

est équivalent à l'expression :

exprGauche <= expr AND expr <= exprDroite

Syntaxe

<expression between> ::=     <expression scalaire> [NOT] BETWEEN <expression scalaire>        AND <expression scalaire>

Exemple

L'instruction suivante sélectionne toutes les commandes dans lesquelles un client a commandé entre 3 et 7 exemplaires dumême aticle :

SELECT * from Orders WHERE Amount BETWEEN 3 AND 7;

EXISTS

Une expression EXISTS a la valeur TRUE ou FALSE selon qu'il y a ou non des éléments dans une table de résultats.

Syntaxe

<prédicat exists> ::= EXISTS ( <expression de table> )

Exemple

L'instruction suivante recherche tous les équipements de plongée dont le nom commence comme le nom d'un autre article.

SELECT * FROM zodiac zWHERE EXISTS( SELECT * FROM zodiac z2 WHERE POSITION(z.name IN z2.name) = 1          AND z.name < > z2.name );

Blackfish SQL 10

82

10

Page 87: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

IN

La clause IN indique une liste de valeurs à rechercher. Chacune des valeurs de la liste est considérée comme correspondant àl'instruction SELECT qui utilise la clause IN.

Syntaxe

<expression in> ::=    <expression scalaire> IN ( <liste à virgules d'expressions scalaires> )

Exemple

L'instruction suivante renvoie tous les enregistrements dont la colonne name contient soit "leo" soit "aquarius" :

SELECT * FROM zodiac WHERE name IN ('leo', 'aquarius');

La clause IN a aussi une variante où une sous-requête est utilisée à la place de la liste d'expressions.

Syntaxe

<expression in> ::= <expression scalaire>    IN ( <expression de table> )

Exemple

SELECT * FROM zodiac WHERE name IN (SELECT name FROM people);

IS

Le prédicat IS teste les expressions. Toute expression peut être évaluée en la valeur NULL, mais les expressionsconditionnelles peuvent être évaluées en trois valeurs : TRUE, FALSE ou UNKNOWN. UNKNOWN est l'équivalent de NULL pour lesexpressions conditionnelles. Notez que, pour une requête SELECT utilisant une clause WHERE, seules les lignes évaluées enTRUE seront incluses. Si l'expression a la valeur FALSE ou UNKNOWN, la ligne n'est pas incluse. La sortie du prédicat IS a deuxrésultats possibles : TRUE ou FALSE.

Syntaxe

<expression is> ::=      <expression scalaire> IS [NOT] { NULL | TRUE | FALSE | UNKNOWN }

Exemples

TRUE IS TRUE est évalué en TRUE.

FALSE IS NULL est évalué en FALSE.

LIKE

Le prédicat LIKE fournit à SQL des recherches de correspondance à partir de modèles de chaînes simples. L'élément derecherche, le modèle et le caractère d'échappement (s'il est donné) doivent tous être évalués en des chaînes. Le modèle peutcomprendre les caractères génériques _ et % où :

• Un trait de soulignement (_) correspondra à tout caractère unique

• Un caractère pourcentage (%) correspondra à toute séquence de n caractères où n >= 0

Le caractère d'échappement, s'il est indiqué, permet d'inclure les deux caractères génériques dans le modèle de recherche. Lacorrespondance avec le modèle distingue les majuscules des minuscules. Appliquez les fonctions LOWER ou UPPER surl'élément de recherche pour rechercher les correspondances sans distinguer les majuscules des minuscules. Syntaxe

<expression like> ::=      <élément de recherche> [NOT] LIKE <modèle> [ ESCAPE <car. d'échappement> ]                                                       <élément de recherche>  ::= <expression scalaire>

10 Blackfish SQL

83

10

Page 88: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

                                                        <modèle>  ::= <expression scalaire>                                                        <car. d'échappement>  ::= <expression scalaire>

Exemples

1. L'expression suivante vaut TRUE si Item contient la chaîne "shoe" en n'importe quelle position :

Item LIKE '%shoe%'

2. L'expression suivante vaut TRUE si Item a exactement 3 caractères et commence par la lettre "S".

Item LIKE 'S__'

3. L'expression suivante vaut TRUE si Item se termine par le caractère pourcentage. L'astérisque (* ) est utilisé pour traiter les deux caractères spéciaux. Lorsqu'il est précédé d'un astérisque, un caractère spécial est traité comme un caractère normal du modèle :

Item Like '%*%' ESCAPE '*'

Comparaisons quantifiées

Une expression peut être comparée à certains ou à tous les éléments d'une table de résultats.

Syntaxe

<comparaison quantifiée> ::=     <expression scalaire> <opérateur de comparaison>         { ANY | SOME | ALL } ( <expression de table> )

Exemple

SELECT * FROM zodiac     WHERE quantify <= ALL ( SELECT quantify FROM zodiac );

Fonctions

Les fonctions agissant sur des chaînes sont indifférentes à leur longueur. Les grandes chaînes étant stockées sous forme deBLOB, vous pouvez définir de grands champs de texte comme VARCHAR pour permetrre les recherches.

ABSOLUTE

La fonction ABSOLUTE agit uniquement sur les expressions numériques, et retourne la valeur absolue du nombre passé enparamètre.

Syntaxe

<fonction absolute> ::= ABSOLUTE( <expression> )

Exemple

SELECT * FROM Scapes WHERE ABSOLUTE( Height - Width ) < 50;

BIT_LENGTH

La fonction BIT_LENGTH donne la longueur en bits d'une valeur STRING, INPUTSTREAM ou OBJECT.

Syntaxe

<fonction longueur en bits> ::=      BIT_LENGTH( <expression> )

Exemple

SELECT * FROM TABLE1 WHERE BIT_LENGTH( binary_column ) > 8192;

Blackfish SQL 10

84

10

Page 89: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

CASE

La fonction CASE renvoie une valeur conditionnelle.

Syntaxe

<fonction case> ::=    CASE  [ <expression> ]        <liste à virgules de clauses when>        ELSE  <expression>    END <clause when> ::=    WHEN <expression>  THEN <expression>

Exemples

CASE   WHEN COL1 > 50 THEN 'Poids lourd'   WHEN COL1 > 25 THEN 'Poids moyen'   WHEN COL1 >  0 THEN 'Poids léger'   ELSE 'Pas de poids spécifié'END                                                        CASE COL2   WHEN 4 THEN 'A'   WHEN 3 THEN 'B'   WHEN 2 THEN 'C'   WHEN 1 THEN 'D'   ELSE 'Note non valide'END

CAST

La fonction CAST transtype les données d'un type en un autre.

Syntaxe

<fonction cast> ::=    CAST ( <nom de colonne> AS <type de données> )

Exemple

Dans l'exemple suivant, le résultat est une ligne dont l'ID de la colonne, de type chaîne, est '001234'

SELECT * FROM employee WHERE CAST ( id AS long ) = 1234;  

CHAR_LENGTH et CHARACTER_LENGTH

Les fonctions SQL CHAR_LENGTH et CHARACTER_LENGTH donnent la longueur de la chaîne indiquée.

Syntaxe

<fonction longueur en car.> ::=      CHAR_LENGTH ( <expression scalaire> )      CHARACTER_LENGTH ( <expression scalaire> )

COALESCE

La fonction COALESCE renvoie la première valeur non-NULL de la liste d'expressions.

10 Blackfish SQL

85

10

Page 90: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Syntaxe

<fonction coalesce> ::=     COALESCE( liste à virgules d'expressions )

Exemple

L'instruction suivante donne une liste de noms. Ces noms proviennent de last_name lorsque cette colonne est non-NULL et defirst_name dans le cas contraire.

SELECT COALESCE(last_name, first_name) AS name FROM table1;

CURRENT_DATE, CURRENT_TIME et CURRENT_TIMESTAMP

Ces fonctions SQL affichent la date ou/et l'heure actuelles. Si une de ces fonctions est placée plus d'une fois dans uneinstruction, elle donnera le même résultat à chacune de ses exécutions.

Exemple

SELECT * from Returns where ReturnDate <= CURRENT_DATE;

CURRENT_ROLE

La fonction CURRENT_ROLE renvoie le rôle en cours, ou NULL si aucun rôle n'a été défini par l'instruction SET ROLE.

Syntaxe

<fonction rôle en cours> ::= CURRENT_ROLE

Exemple

L'instruction suivante renvoie toutes les notes de la table CUSTOMERS placées par une personne utilisant le rôle MANAGER. Lacolonne SOURCE a pour type de données VARCHAR.

SET ROLE MANAGER;                                                        SELECT * FROM CUSTOMERSWHERE SOURCE = CURRENT_ROLE;

CURRENT_USER

La fonction CURRENT_USER renvoie le nom de l'utilisateur en cours.

Syntaxe

<fonction utilisateur en cours> ::= CURRENT_USER

Exemple

L'instruction suivante renvoie toutes les notes de la table INVOICES placées par l'utilisateur en cours. La colonne SOURCE apour type de données VARCHAR.

SELECT * FROM INVOICESWHERE SOURCE = CURRENT_USER;

EXTRACT

La fonction SQL EXTRACT extrait des parties des valeurs date et heure. L'expression peut être une valeur DATE, TIME ouTIMESTAMP.

Blackfish SQL 10

86

10

Page 91: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Syntaxe

<fonction extract> ::=      EXTRACT ( <champ d'extraction> FROM <expression scalaire> )                                                        <champ d'extraction> ::=      YEAR    | MONTH    | DAY    | HOUR    | MINUTE    | SECOND

Exemples

EXTRACT(MONTH FROM DATE '1999-05-17') donne 5. EXTRACT(HOUR FROM TIME '18:00:00') donne 18. EXTRACT(HOUR FROM DATE '1999-05-17') déclenche une exception.

LOWER et UPPER

Les fonctions SQL LOWER et UPPER convertissent simplement la chaîne indiquée dans la casse appropriée, en l'affichantentièrement en minuscules ou entièrement en majuscules :

Syntaxe

<fonction lower> ::=      LOWER ( <expression scalaire> )                                                        <fonction upper> ::=      UPPER ( <expression scalaire> )

NULLIF

La fonction NULLIF compare deux expressions. Elle renvoie NULL si les expressions sont égales. Sinon, elle renvoie lapremière expression. Elle est logiquement équivalente à l'expression CASE suivante : CASE WHEN expr1 = expr2 THENNULL ELSE expr1 END.

Syntaxe

<NULLIF> ::=     ( <expression scalaire>, <expression scalaire> )

Exemple

L'instruction suivante renvoie une ligne avec la valeur last_name pour chaque ligne de TABLE1 où le prénom n'est pas égal aunom. Si la valeur du prénom, first_name, est identique à la valeur du nom, last_name, elle renvoie NULL.

SELECT NULLIF(last_name, first_name) FROM TABLE1; 

OCTET_LENGTH

La fonction OCTET_LENGTH donne la longueur en octets d'une valeur STRING, INPUTSTREAM ou OBJECT.

Syntaxe

<longueur en octets> ::= OCTET_LENGTH(<expression>)

Exemple

SELECT * FROM TABLE1 WHERE OCTET_LENGTH(binary_column)>1024;

10 Blackfish SQL

87

10

Page 92: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

POSITION

La fonction SQL POSITION renvoie la position d'une chaîne dans une autre chaîne. Si un des arguments est évalué en NULL, lerésultat est NULL.

Syntaxe

<fonction position> ::=      POSITION ( <chaîne> IN <autre chaîne> )

Exemples

POSITION('BCD' IN 'ABCDEFG') donne 2.POSITION('' IN 'ABCDEFG') donne 1.POSITION('TAG' IN 'ABCDEFG') donne 0.

SQRT

La fonction SQRT agit uniquement sur les expressions numériques, et donne la racine carrée du nombre passé en paramètre.

Syntaxe

<fonction sqrt>  ::=  SQRT( <expression> )

Exemple

SELECT * FROM Scapes WHERE SQRT(HEIGHT*WIDTH - ?) > ?;

SUBSTRING

La fonction SQL SUBSTRING extrait une sous-chaîne de la chaîne indiquée. Si un des opérandes est NULL, le résultat est NULL.La position départ indique l'emplacement du premier caractère de la sous-chaîne, les positions étant comptées encommençant à 1 pour le premier caractère de la chaîne. Si FOR est présent, indique la longueur du résultat.

Syntaxe

<fonction substring> ::=  SUBSTRING ( <expression chaîne> FROM <position de début> [ FOR <longueur> ] )

Exemples

SUBSTRING('ABCDEFG' FROM 2 FOR 3)

donne 'BCD'.

SUBSTRING('ABCDEFG' FROM 4)

donne 'DEFG'.

SUBSTRING('ABCDEFG' FROM 10)

donne ''.

SUBSTRING('ABCDEFG' FROM -6 FOR 3)

donne 'ABC'.

SUBSTRING('ABCEDFG' FROM 2 FOR -1)

déclenche une exception.

Blackfish SQL 10

88

10

Page 93: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

TRIM

La fonction SQL TRIM supprime les caractères de remplissage au début ou à la fin de la chaîne indiquée. Le <remplissage>doit être une chaîne de longueur 1, qui représente le caractère devant être enlevé de la chaîne.

• Si le <remplissage> est omis, les caractères espace seront supprimés.

• Si les <spécif. trim> sont omises, BOTH est utilisé.

• Si et le <remplissage> et les <spécif. trim> sont omis, le mot clé FROM doit être omis.

Syntaxe

<fonction trim> ::= TRIM ( [<spécif. trim>] [<remplissage>] [FROM] <expression scalaire> ) <spécif. trim> ::= LEADING | TRAILING | BOTH<remplissage> ::= <expression scalaire>

Exemples

TRIM(' Bonjour à tous ')

donne 'Bonjour à tous'.

TRIM(LEADING '0' FROM '00000789,75')

donne '789,75'.

USER

La fonction USER renvoie le nom de l'utilisateur en cours ; cette fonction est la même que CURRENT_USER.

Syntaxe

<fonction user> ::= USER

Exemple

L'instruction suivante renvoie toutes les notes de la table INVOICES placées par l'utilisateur en cours.

SELECT * FROM INVOICES    WHERE SOURCE = USER;

Expressions de tables

Cette section décrit les conventions utilisées dans la référence pour les instructions suivantes. Spécifiquement :

• Expressions de sélection

• Unions, intersections et différences

• Expressions de jointure

<expression de table> ::= <expression de table> UNION [ALL] <expression de table> | <expression de table> EXCEPT [ALL] <expression de table> |<expression de table> INTERSECT [ALL] <expression de table> | <expression de jointure> | <expression de sélection> | ( <expression de table> )

Expressions de sélection

Une expression de sélection est l'expression de table la plus utilisée dans une instruction SELECT.

• Spécifiez DISTINCT pour éliminer les doublons dans le résultat.

10 Blackfish SQL

89

10

Page 94: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

• Spécifiez GROUP BY et HAVING en conjonction avec les fonctions d'agrégation pour calculer des valeurs récapitulant les données d'une table. La clause WHERE (si elle est présente) limitera le nombre des lignes incluses dans le récapitulatif. Si une fonction d'agrégation est utilisée sans clause GROUP BY, un récapitulatif de la table entière est calculé. Si une clause GROUP BY est présente, un récapitulatif sera calculé pour chaque ensemble unique de valeurs des colonnes énumérées dans la clause GROUP BY. Ensuite, si la clause HAVING est présente, les groupes complets seront filtrés selon l'expression conditionnelle de la clause HAVING.

Les requêtes récapitulatives suivent des règles particulières selon l'emplacement des colonnes dans les expressions :

• La clause WHERE ne peut pas contenir de fonction d'agrégation.

• Les références de colonne apparaissant en dehors d'un opérateur d'agrégation doivent être dans la clause GROUP BY.

• Vous ne pouvez pas imbriquer les fonctions d'agrégation.

Syntaxe

<expression de sélection> ::=    SELECT [ ALL | DISTINCT ] <liste à virgules d'éléments de sélection>    FROM <liste à virgules de références de tables>        [ WHERE <expression conditionnelle> ]        [ GROUP BY <liste à virgules de références de colonnes> ]        [ HAVING <expression conditionnelle> ]<élément de sélection> ::=       <expression scalaire> [ [AS] <nom de colonne de sortie> ]     | [ <variable d'intervalle> . ] *<référence de table> ::=      <expression de jointure>    | <nom de table> [ <nouveau nom de table de sortie> ]    | ( <expression de table> ) [ <nouveau nom de table de sortie> ] <nouveau nom de table de sortie> ::=       [AS] <variable d'intervalle> [ ( <liste à virgules de noms de colonnes> ) ] <expression conditionnelle> ::=       <expression conditionnelle> OR <expression conditionnelle>    | <expression conditionnelle> AND <expression conditionnelle>    | NOT <expression conditionnelle>    | <expression scalaire> <opérateur de comparaison> <expression scalaire>    | <expression scalaire> <opérateur de comparaison> { ANY | SOME | ALL }         (<expression de table>)    | <expression scalaire> [NOT] BETWEEN <expression scalaire>    | <expression scalaire> [NOT] LIKE <expression scalaire>         [ ESCAPE <expression scalaire> ]    | <expression scalaire> [NOT] IS { NULL | TRUE | FALSE | UNKNOWN }    | <expression scalaire> IN ( <liste à virgules d'expressions scalaires> )    | <expression scalaire> IN ( <expression de table> )    | EXISTS ( <expression de table> ) <référence de colonne> ::=      [ <qualificateur de table> . ] <nom de colonne> <expression scalaire> ::=      <expression scalaire> {+ | - | * | / | <concat> } <expression scalaire>    | {+ | -} <expression scalaire>    | ( <expression> )    | ( <expression de table> )    | <référence de colonne>    | <référence de fonction définie par l'utilisateur>    | <littéral>    | <fonction d'agrégation>    | <fonction>    | <marqueur de paramètre> <nom de table> ::=      [ <nom de schéma> . ] <identificateur SQL>

Blackfish SQL 10

90

10

Page 95: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

<nom de schéma> ::=     <identificateur SQL> <référence de fonction définie par l'utilisateur> ::=     <nom de méthode> ([ <liste à virgules d'expressions> ])

Exemple 1

L'instruction suivante affiche une seule ligne avec la valeur totale de toutes les commandes.

SELECT SUM(Amount * Price) FROM Orders;

Exemple 2

L'instruction suivante affiche une seule ligne avec le nombre de commandes dans lesquelles Amount est différent de NULL pourle client 123.

SELECT COUNT(Amount) FROM Orders WHERE CustId = 123;

Exemple 3

L'instruction suivante affiche un ensemble de lignes avec la valeur totale de toutes les commandes regroupées par client pourles clients ayant un numéro d'ID inférieur à 200.

SELECT CustId, SUM(Amount * Price), COUNT(Amount)        WHERE CustId < 200 GROUP BY CustId;

Exemple 4

L'exemple suivant affiche un ensemble des gros clients avec la valeur de leurs commandes.

SELECT CustId, SUM(Amount * Price), COUNT(Amount)   GROUP BY CustId HAVING SUM(Amount * Price) > 500000;

Exemple 5

L'instruction suivante est incorrecte car il y a des fonctions d'agrégation imbriquées.

SELECT CustId, COUNT(23 + SUM(Amount)) GROUP BY CustId;

Exemple 6

L'instruction suivante est incorrecte car la colonne CustId est référencée dans la liste des éléments de sélection, mais estabsente de la liste des références GROUP BY.

SELECT CustId, SUM(Amount* Price) GROUP BY Amount;

Pour connaître la syntaxe des expressions de tables, voir "Expressions de tables".

Unions, intersections et différences

Une expression de table est une expression dont le résultat est une table non nommée. Parmi les opérateurs suivants,INTERSECT est la liaison la plus forte et les liaisons UNION et EXCEPT sont de même force.

UNION ALL Crée l'union de deux tables incluant tous les doublons.

UNION Crée l'union de deux tables. Si une ligne se reproduit plusieurs fois dans les deux tables, le résultatcomprend cette ligne deux fois seulement. Les autres lignes du résultat n'ont pas de doublon.

INTERSECTIONALL

Crée l'intersection de deux tables incluant tous les doublons.

INTERSECTION Crée l'intersection de deux tables. Si une ligne a des doublons dans les deux tables, le résultat comprendcette ligne deux fois seulement. Les autres lignes du résultat n'ont pas de doublon.

10 Blackfish SQL

91

10

Page 96: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

EXCEPT ALL Crée une table possédant toutes les lignes qui n'existent que dans la première table. Si une ligne serencontre m fois dans la première table et n fois dans la seconde, le résultat contient cette ligne un nombrede fois égal au plus grand nombre entre zéro et m-n.

EXCEPT Crée une table possédant toutes les lignes qui n'existent que dans la première table. Si une ligne serencontre m fois dans la première table et n fois dans la seconde, le résultat contient la ligne exactementdeux fois si m > 1 et n = 0. Les autres lignes du résultat n'ont pas de doublon.

Exemple 1

SELECT * FROM T1 UNION SELECT * FROM T2 UNION SELECT * FROM T3;

est exécutée comme :

(SELECT * FROM T1 UNION SELECT * FROM T2) UNION SELECT * FROM T3;

Exemple 2

SELECT * FROM T1 UNION SELECT * FROM T2 INTERSECT SELECT * FROM T3;

est exécutée comme :

SELECT * FROM T1 UNION (SELECT * FROM T2 INTERSECT SELECT * FROM T3);

Expressions de jointure

Les expressions de jointure de Blackfish SQL donnent accès à une grande variété de mécanismes de jointure. Les deuxmécanismes les plus utilisés, les jointures internes et les jointures croisées, peuvent être exprimés avec une expression SELECTindépendante, mais tous les genres de jointures externes doivent être exprimés avec une expression JOIN.

CROSS JOIN A CROSS JOIN B produit le même ensemble de résultats que  SELECT A.*, B.* FROM A,B

INNER JOIN A INNER JOIN B ON A.X=B.X produit le même résultat que SELECT A.*, B.* FROM A,B WHERE A.X=B.X

LEFT OUTER A LEFT OUTER JOIN B ON A.X=B.X produit les lignes de la jointure interne correspondante plus les lignes deA non concernées, en remplissant les espaces correspondant aux colonnes de B par des NULL.

RIGHTOUTER

A RIGHT OUTER JOIN B ON A.X=B.X produit les lignes de la jointure interne correspondante plus les lignesde B non concernées, en remplissant les espaces correspondant aux colonnes de A par des NULL.

FULL OUTER A RIGHT OUTER JOIN B ON A.X=B.X produit les lignes de la jointure interne correspondante plus les lignesde A et de B non concernées, en remplissant les espaces correspondant aux colonnes de A et de B par desNULL.

UNION A UNION JOIN B produit un résultat similaire à ce qui suit :   A LEFT OUTER JOIN B ON FALSE     UNIONALL     A RIGHT OUTER JOIN B ON FALSE une table avec des colonnes pour toutes les colonnes de A etde B, avec toutes les lignes issues de A ayant des valeurs NULL pour les colonnes issues de B plus toutes leslignes issues de B ayant des valeurs NULL pour les colonnes issues de A.

Les optionssuivantess'excluentmutuellement :

ON ON est une expression devant être remplie pour une expression JOIN.

USING USING (C1, C2, C3) est équivalent à l'expression ON ci-dessus , sauf que les colonnes C1, C2 et C3n'apparaissent qu'une fois chacune dans la table de résultats et que ce sont les trois premières colonnes.

NATURAL NATURAL est identique à une clause USING. Les noms des colonnes apparaissent à la fois dans les deuxtables A et B.

Syntaxe

<expression de jointure> ::=

Blackfish SQL 10

92

10

Page 97: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

      <référence de table> CROSS JOIN <référence de table>    | <référence de table> [NATURAL] [INNER] JOIN <référence de table>          [ <genre de jointure> ]    | <référence de table> [NATURAL] LEFT [OUTER] JOIN <référence de table>          [ <genre de jointure> ]    | <référence de table> [NATURAL] RIGHT [OUTER] JOIN <référence de table>          [ <genre de jointure> ]    | <référence de table> [NATURAL] FULL [OUTER] JOIN <référence de table>          [ <genre de jointure> ]    | <référence de table> UNION JOIN <référence de table> <référence de table> ::=       <expression de jointure>    | <nom de table> [ <nouveau nom de table de sortie> ]      <référence de table> CROSS JOIN <référence de table>    | <référence de table> [NATURAL] [INNER] JOIN <référence de table>          [ <genre de jointure> ]    | <référence de table> [NATURAL] LEFT [OUTER] JOIN <référence de table>          [ <genre de jointure> ]    | <référence de table> [NATURAL] RIGHT [OUTER] JOIN <référence de table>          [ <genre de jointure> ]    | <référence de table> [NATURAL] FULL [OUTER] JOIN <référence de table>          [ <genre de jointure> ]    | <référence de table> UNION JOIN <référence de table> <référence de table> ::=       <expression de jointure>    | <nom de table> [ <nouveau nom de table de sortie> ]| ( <expression de table> ) [ <nouveau nom de table de sortie> ]<nouveau nom de table de sortie> ::=       [AS] <variable d'intervalle> [ ( <liste à virgules de noms de colonnes> ) ] <variable d'intervalle> ::=       <identificateur SQL> <genre de jointure> ::=       ON <expression conditionnelle>    | USING ( <liste à virgules de noms de colonnes> )

Exemples

SELECT * FROM Tinvoice FULL OUTER JOIN Titem USING ("InvoiceNumber"); SELECT * FROM Tinvoice LEFT JOIN Titem ON Tinvoice."InvoiceNumber"     = Titem."InvoiceNumber"; SELECT * FROM Tinvoice NATURAL RIGHT OUTER JOIN Titem; SELECT * FROM Tinvoice INNER JOIN Titem USING ("InvoiceNumber"); SELECT * FROM Tinvoice JOIN Titem ON Tinvoice."InvoiceNumber"     = Titem."InvoiceNumber";

Instructions

Le pilote JDBC de Blackfish SQL prend en charge un sous-ensemble de la norme ANSI/ISO SQL-92. En termes généraux, iloffre :

• Un langage de définition de données (Data Definition Language) pour la gestion des tables et des index, des schémas, des vues et des éléments de sécurité.

• La manipulation et la sélection de données avec INSERT, UPDATE, DELETE et SELECT, mais aucun curseur.

• La prise en charge des expressions de tables générales, comme JOIN, UNION et INTERSECT.

Dans Blackfish SQL pour Java, les opérations sur les curseurs sont prises en charge via l'API des ResultSet de JDBC version3.0.

10 Blackfish SQL

93

10

Page 98: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Syntaxe

<instruction SQL> ::=     <instruction de définition des données>   | <instruction de contrôle des transactions>   | <instruction de manipulation des données><instruction de définition des données> ::=     <instruction create schema>   | <instruction drop schema>   | <instruction create table>   | <instruction alter table>   | <instruction drop table>   | <instruction create view>   | <instruction alter view>   | <instruction drop view>   | <instruction create index>   | <instruction drop index>   | <instruction create method>   | <instruction drop method>   | <instruction create class>   | <instruction drop class>   | <instruction create user>   | <instruction alter user>   | <instruction drop user>   | <instruction create role>   | <instruction drop role>   | <instruction grant>   | <instruction revoke>   | <instruction set role><instruction de contrôle des transactions> ::=     <instruction commit>   | <instruction rollback>   | <instruction set autocommit>   | <instruction set transaction> <instruction de manipulation des données> ::=     <instruction de sélection>   | <instruction de sélection d'une seule ligne>   | <instruction delete>   | <instruction insert>   | <instruction update>   | <instruction call>   | <instruction lock>

Instructions de définition des données

CREATE SCHEMA

L'instruction CREATE SCHEMA crée un espace de nommage pour les tables, les vues et les méthodes. Vous pouvez l'utiliserpour créer plusieurs objets avec une seule instruction SQL.

• Vous pouvez créer une table, une vue ou une méthode dans un schéma existant, de deux manières :

• Vous la créez en tant que partie d'une instruction CREATE SCHEMA.

• Vous pouvez spécifier un nom de schéma en tant que partie du nom de l'objet lorsque vous utilisez une instruction autonome CREATE TABLE, CREATE VIEW ou CREATE METHOD. Si vous utilisez la dernière méthode (CREATE TABLE, par exemple), vous devez spécifier un nom de schéma existant déjà.

• Pour créer un objet dans un nouveau schéma, spécifiez un nouveau nom de schéma dans l'instruction CREATE SCHEMA puis créez la table, la vue ou la méthode au sein de l'instruction CREATE SCHEMA.

• La clause AUTHORIZATION nomme le propriétaire du schéma. Si vous ne spécifiez pas de propriétaire, le propriétaire sera l'utilisateur de la session SQL. Seul un administrateur peut spécifier un nom d'utilisateur autre que son propre nom d'utilisateur dans la clause AUTHORIZATION.

Blackfish SQL 10

94

10

Page 99: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

• Si vous utilisez une instruction CREATE TABLE, CREATE VIEW ou CREATE METHOD autonome (c'est-à-dire non imbriquée dans une instruction CREATE SCHEMA) et que vous ne spécifiez pas de nom de schéma au sein de l'instruction CREATE, Blackfish SQL utilise l'algorithme suivant pour assigner le nouvel objet à un schéma :

• Si vous avez créé explicitement un schéma ayant le même nom que votre nom d'utilisateur en cours, alors vous avez créé un schéma par défaut personnel. La table, la vue ou la méthode appartient à votre schéma par défaut.

• Si vous n'avez pas créé de schéma par défaut personnel, la table, la vue ou la méthode appartient au schéma DEFAULT_SCHEMA.

• Vous pouvez créer des schémas ayant des noms différents de votre nom d'utilisateur, mais vous ne pouvez pas créer de schéma qui porte le nom d'un autre utilisateur sauf si vous avez des privilèges d'administration.

• Tous les objets créés dans des versions précédentes de Blackfish SQL ne prenant pas en charge les schémas appartiennent au schéma DEFAULT_SCHEMA après migration vers la version 7 ou une version supérieure.

• Un point-virgule marque la fin de l'instruction CREATE SCHEMA. Il ne peut pas y avoir de points-virgules entre les éléments d'un schéma.

• Toutes les instructions de la liste des éléments d'un schéma sont exécutées comme une seule instruction dans la même transaction.

Schémas par défaut

Initialement, votre schéma par défaut est DEFAULT_SCHEMA. Quand vous créez un schéma ayant le même nom que votre nomd'utilisateur en cours, ce schéma devient votre schéma par défaut. Vous pouvez créer des objets sans spécifier de nom deschéma ; ces objets appartiendront automatiquement à votre schéma par défaut. Supposez, par exemple, que l'utilisateur PETERait créé le schéma PETER. Plus tard, PETER crée une table sans spécifier de schéma. La table appartient au schéma PETER.

Dans l'exemple suivant, la table créée serait réellement nommée PETER.FOO.

[UTILISATEUR : PETER]CREATE TABLE FOO (COL1 INT, COL2 VARCHAR);

Vous avez le droit de créer des schémas avec d'autres noms que votre nom d'utilisateur, mais ils ne pourront jamais être votreschéma par défaut. Vous ne pouvez pas créer de schéma qui porte le nom d'un autre utilisateur, sauf si vous êtes unadministrateur.

Syntaxe

<instruction create schema> ::=     CREATE SCHEMA [ <nom de schéma> ]        [ AUTHORIZATION <nom d'utilisateur> ]           <liste à virgules d'éléments de schéma> <nom de schéma> ::=     <identificateur SQL> <liste à virgules d'éléments de schéma> ::=     <instruction create table>   | <instruction create view>   | <instruction create method>   | <instruction grant>

Voir GRANT pour de plus amples informations sur les instructions GRANT.

Exemple

L'instruction suivante crée le schéma BORIS avec une table T1 et une vue V1. Dans ce schéma, l'utilisateur BJORN reçoit lesprivilèges SELECT sur la vue V1. Après l'exécution de cette instruction, BORIS est le schéma par défaut de l'utilisateur BORIS.

[UTILISATEUR : BORIS]CREATE SCHEMA BORISCREATE TABLE T1 (C1 INT, C2 VARCHAR)CREATE VIEW V1 AS SELECT C2 FROM T1

10 Blackfish SQL

95

10

Page 100: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

GRANT SELECT ON V1 TO BJORN;

DROP SCHEMA

L'instruction DROP SCHEMA supprime le schéma spécifié. Si la commande est utilisée sans option, elle est équivalente à laspécification de l'option RESTRICT : le schéma à supprimer doit être vide. La commande échoue si le schéma contient desobjets.

• L'option RESTRICT provoque l'échec de l'instruction s'il existe des objets dans le schéma. RESTRICT est l'option par défaut.

• Utilisée avec l'option CASCADE, l'instruction DROP SCHEMA supprime le schéma nommé y compris toutes ses tables, vues, dépendances de clés étrangères et méthodes.

ATTENTION : La commande DROP SCHEMA utilisée avec l'option CASCADE est extrêmement puissante et doit être employéeavec précaution. Lorsque cette commande est exécutée, elle supprime le schéma et tous ses objets et dépendances sanspossibilité de repentir. Il ne peut y avoir d'annulation.

ASTUCE : Si vous voulez supprimer un schéma mais souhaitez conserver certaines de ses tables, utilisez la commande ALTERTABLE pour attribuer les tables à un autre schéma. Par exemple :

ALTER TABLE OLDSCHEMA.JOBSRENAME TO NEWSCHEMA.JOBS;

Syntaxe

<instruction drop schema> ::=  DROP SCHEMA <nom de schéma> [ CASCADE | RESTRICT ]

Exemples

1. Les deux instructions suivantes sont équivalentes : elles suppriment le schéma BORIS ; chacune échoue si le schéma contient des objets.

DROP SCHEMA BORIS; DROP SCHEMA BORIS RESTRICT;

2. L'instruction suivante supprime le schéma BORIS et toutes ses tables, vues et méthodes. Elle supprime aussi les vues et les clés étrangères dépendantes.

DROP SCHEMA BORIS CASCADE;

CREATE TABLE

L'instruction CREATE TABLE crée une table Blackfish SQL. Chaque définition de colonne doit inclure au moins le nom de lacolonne et le type de ses données. De manière facultative, vous pouvez spécifier pour chaque colonne une valeur par défautainsi qu'une contrainte d'unicité.

De manière facultative, vous pouvez aussi spécifier une clé étrangère et une clé primaire. Blackfish SQL prend en chargel'utilisation d'une ou de plusieurs colonnes comme clé primaire ou clé étrangère.

Spécification des schémas

Pour créer une table dans un schéma particulier, spécifiez le nom du schéma comme partie du nom de la table :

CREATE TABLE UNSCHEMA.MATABLE(. . .);

Si vous ne spécifiez pas de nom de schéma, la table est créée dans votre schéma par défaut. Voir CREATE SCHEMA pour deplus amples informations sur les schémas.

Blackfish SQL 10

96

10

Page 101: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Suivi des modifications des données pour DataExpress

Remarque: Cette fonctionnalité n'est prise en charge que par Blackfish SQL pour Java.

Si vous spécifiez RESOLVABLE dans la définition de la table, Blackfish SQL conserve la trace des modifications apportées auxdonnées. Les modifications enregistrées sont accessibles à l'application DataExpress, mais non à SQL. La valeur par défaut estNOT RESOLVABLE.

Non vérification de la cohérence

L'option NO CHECK crée la clé étrangère sans vérifier la cohérence des données lors de la création. Utilisez cette option avecprécaution.

Utilisation de colonnes incrémentées automatiquement avec SQL

Pour créer ou modifier une colonne afin qu'elle soit incrémentée automatiquement (propriété Autoincrement) avec SQL, ajoutezle mot clé AUTOINCREMENT dans la définition de votre <élément de table>.

L'exemple suivant crée une table T1 ayant une colonne d'entiers auto-incrémentés appelée C1 :

CREATE TABLE T1 ( C1 INT AUTOINCREMENT, C2 DATE, C3 CHAR(32) );

Pour obtenir la valeur incrémentée automatiquement d'une nouvelle ligne insérée avec le pilote JDBC JDS (version 1.3 ouprécédente de la JVM), vous pouvez appeler la méthode JdsStatement.getGeneratedKeys. Cette méthode est égalementaccessible dans l'interface instruction de JDBC 3 dans JVM 1.4.)

Spécification de la position des colonnes

Dans la définition des colonnes, utilisez l'option POSITION pour imposer la position d'une colonne dans une table (deuxièmecolonne, par exemple). Le snippet de code suivant oblige la colonne COLD à occuper la deuxième position :

CREATE TABLE(COLA INT, COLB STRING, COLC INT, COLD STRING POSITION 2);

Syntaxe

<instruction create table> ::=        CREATE TABLE <nom de table> ( <liste à virgules d'éléments de table> )<nom de table> ::=      [ <nom de schéma> . ] <identificateur SQL> <nom de schéma> ::=      <identificateur SQL><élément de table> ::=         <définition de colonne>        | <clé primaire>        | <clé unique>        | <clé étrangère>       | [NOT] RESOLVABLE <définition de colonne> ::=       <nom de colonne> <type de données>     [ DEFAULT <valeur par défaut> ]    [ [NOT] NULL ]    [ AUTOINCREMENT ]    [ POSITION <littéral entier> ]    [ [ CONSTRAINT <nom de contrainte> ] PRIMARY KEY ]    [ [ CONSTRAINT <nom de contrainte> ] UNIQUE ]    [ [ CONSTRAINT <nom de contrainte> ] <définition de références> ]<nom de colonne> ::=        <identificateur SQL>                                                        <valeur par défaut> ::=         <littéral>       | <fonction date en cours><fonction date en cours> ::=

10 Blackfish SQL

97

10

Page 102: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

       CURRENT_DATE     | CURRENT_TIME     | CURRENT_TIMESTAMP<clé primaire> ::=     [ CONSTRAINT <nom contrainte>] PRIMARY KEY] <liste à virgules de noms de colonnes>) <clé unique> ::=       [ CONSTRAINT <nom de contrainte> ] UNIQUE ( <liste à virgules de noms de colonnes> )                                                         <clé étrangère> ::=     [ CONSTRAINT <nom de contrainte> ] FOREIGN KEY ( <liste à virgules de noms de colonnes> )         <définition de références> <définition de références> ::=     REFERENCES <nom de table> [ ( <liste à virgules de noms de colonnes> ) ]       [ ON DELETE <action> ]      [ ON UPDATE <action> ]       [ NO CHECK ]  <action> ::=      NO ACTION       | CASCADE       | SET DEFAULT      | SET NULL                                                        <nom de contrainte> ::=       <identificateur SQL>

Exemple 1

L'instruction suivante crée une table de quatre colonnes. La colonne CustId est la clé primaire et la colonne OrderDate utilisela date en cours comme valeur par défaut.

CREATE TABLE Orders ( CustId INTEGER PRIMARY KEY, Item VARCHAR(30),      Amount INT, OrderDate DATE DEFAULT CURRENT_DATE);

Exemple 2

L'instruction suivante crée une table utilisant deux colonnes comme contrainte de clé primaire :

CREATE TABLE T1 (C1 INT, C2 STRING, C3 STRING, PRIMARY KEY (C1, C2));

Exemple 3

L'instruction suivante crée une table T1 dans le schéma BORIS :

CREATE TABLE BORIS.T1 (C1 INT, C2 STRING, C3 STRING);

ALTER TABLE

L'instruction ALTER TABLE réalise les opérations suivantes :

• Ajoute ou supprime des colonnes dans une table Blackfish SQL

• Définit ou supprime les valeurs par défaut des colonnes et leur faculté à être NULLables

• Modifie les types de données des colonnes

• Ajoute ou supprime les contraintes des colonnes par rapport aux clés primaires, aux clés uniques et aux clés étrangères, ainsi que les contraintes de la table ; modifie la table référencée et le type d'action associé à ces contraintes

• Renomme les colonnes

• Renomme les tables ; cela vous permet de déplacer les tables d'un schéma à l'autre

• Ajoute ou supprime la propriété RESOLVABLE d'une table

Blackfish SQL 10

98

10

Page 103: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

• Repositionne les colonnes dans la table

Syntaxe

<instruction alter table> ::=     ALTER TABLE <nom de table> <liste à virgules de définitions de modification>                                                       <nom de table> ::=  [ <nom de schéma> . ] <identificateur SQL><définition de modification> ::=      <ajout d'élément de colonne>    | <suppression d'élément de colonne>    | <modification d'élément de colonne>    | <ajout de contrainte>    | <suppression de contrainte>    | [RENAME] TO <nom de table>    | [NOT] RESOLVABLE <ajout d'élément de colonne> ::= ADD [COLUMN] <définition de colonne> <définition de colonne> ::=       <nom de colonne> <type de données>     [ DEFAULT <valeur par défaut> ]    [ [NOT] NULL ]    [ AUTOINCREMENT ]    [ POSITION <littéral entier> ]    [ [ CONSTRAINT <nom de contrainte> ] PRIMARY KEY ]    [ [ CONSTRAINT <nom de contrainte> ] UNIQUE ]    [ [ CONSTRAINT <nom de contrainte> ] <définition de références> ] <suppression d'élément de colonne> ::= DROP [COLUMN] <définition de colonne><modification d'élément de colonne> ::=        ALTER [COLUMN] <nom de colonne> [TYPE] <type de données>     | ALTER [COLUMN] <nom de colonne> SET DEFAULT <valeur par défaut>     | ALTER [COLUMN] <nom de colonne> DROP DEFAULT     | ALTER [COLUMN] <nom de colonne> [NOT] NULL     | ALTER [COLUMN] <nom de colonne> [RENAME] TO <nom de colonne>     | ALTER [COLUMN] <nom de colonne> [POSITION] <littéral entier>     | ALTER [COLUMN] <nom de colonne> AUTOINCREMENT     | ALTER [COLUMN] <nom de colonne> DROP AUTOINCREMENT <ajout de contrainte> ::= ADD <contrainte de table de base> <contrainte de table de base> ::=     <clé primaire> |  <clé unique> |  <clé étrangère> <suppression de contrainte> ::= DROP CONSTRAINT <nom de contrainte> <clé primaire> ::=     [ CONSTRAINT <nom de contrainte> ]      PRIMARY KEY <liste à virgules de noms de colonnes>) <clé unique> ::=      [ CONSTRAINT <nom de contrainte> ]      UNIQUE ( <liste à virgules de noms de colonnes> ) <clé étrangère> ::=      [ CONSTRAINT <nom de contrainte> ]      FOREIGN KEY ( <liste à virgules de noms de colonnes>)    <définition de références>                          <définition de références> ::=       REFERENCES <nom de table> [ ( <liste à virgules de noms de colonnes> ) ]      [ ON DELETE <action> ]     [ ON UPDATE <action> ]      [ NO CHECK ] <action> ::=       NO ACTION  

10 Blackfish SQL

99

10

Page 104: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

    | CASCADE      | SET DEFAULT     | SET NULL                                                       <nom de contrainte> ::=  <identificateur SQL>

Le mot clé facultatif COLUMN est inclus dans ALTER [COLUMN] pour la compatibilité SQL. Il n'a aucun effet.

Exemple

L'exemple suivant ajoute une colonne nommée ShipDate à la table Orders et supprime de cette table la colonne Amount.

ALTER TABLE OrdersADD ShipDate DATE,DROP Amount;

L'exemple suivant déplace la table Jobs du schéma OldSchema dans le schéma NewSchema.

ALTER TABLE OldSchema.JobsRENAME TO NewSchema.Jobs;

DROP TABLE

L'instruction DROP TABLE supprime une table, et ses index, d'une base de données Blackfish SQL.

• L'utilisation de l'option RESTRICT garantit que l'instruction échoue si la table a des dépendances en clés étrangères ou en vues.

• L'option CASCADE provoque la suppression de toutes les vues dépendantes et de toutes les clés étrangères dépendantes lors de la suppression de la table.

• Ne spécifier ni RESTRICT ni CASCADE supprime la table et toutes les clés étrangères qui lui font référence. L'instruction échoue s'il existe des vues dépendantes.

Syntaxe

<instruction drop table> ::=      DROP TABLE [ <nom de schéma> . ]<nom de table> [ CASCADE|RESTRICT ] <nom de schéma> ::= <identificateur SQL>

Exemples

1. L'instruction suivante supprime la table Orders uniquement s'il n'existe pas de vues dépendantes. S'il existe des clés étrangères dépendantes, l'instruction réussit et les clés étrangères sont supprimées.

DROP TABLE Orders; 

2. L'instruction suivante supprime la table Orders uniquement s'il n'existe pas de vues dépendantes ni de clés étrangères dépendantes.

DROP TABLE Orders RESTRICT;

3. L'instruction suivante supprime la table Orders. Toutes les vues dépendantes et toutes les clés étrangères dépendantes sont également supprimées.

DROP TABLE Orders CASCADE;

CREATE VIEW

L'instruction CREATE VIEW crée une table dérivée en sélectionnant dans les tables existantes les colonnes spécifiées. Les vuessont une façon d'accéder à une sous-collection cohérente des données stockées dans une ou plusieurs tables. Lorsque lesdonnées des tables sous-jacentes changent, la vue reflète ces changements.

Les vues ressemblent aux tables de base de données ordinaires mais elles ne sont pas physiquement stockées dans la base.La base stocke uniquement la définition de la vue et utilise cette définition pour filtrer les données lorsqu'une requête fait

Blackfish SQL 10

100

10

Page 105: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

référence à la vue.

Lorsque vous créez une vue, vous pouvez spécifier les noms des colonnes de la vue à l'aide de la partie optionnelle de lasyntaxe <liste à virgules de noms de colonnes>. Si vous ne spécifiez pas de nom de colonne, sont utilisés les noms descolonnes de la table dont sont dérivées les colonnes de la vue. Si vous spécifiez des noms des colonnes, vous devez enspécifier un nombre exactement égal au nombre des colonnes renvoyées par la requête SELECT.

La clause WITH CHECK OPTION provoque une vérification à l'exécution garantissant qu'aucune ligne insérée ou mise à jour nesera éliminée par la clause WHERE de la définition de la vue.

Les vues ne sont actualisables que dans certaines conditions. Si vous voulez exécuter INSERT, UPDATE ou DELETE sur unevue, celle-ci doit respecter l'ensemble des conditions suivantes :

• Elle est dérivée d'une seule table.

• Aucune des colonnes n'est calculée.

• La clause SELECT définissant la vue ne contient pas le mot clé DISTINCT.

• L'expression SELECT définissant la vue ne contient aucun des éléments suivants :

• Sous-requêtes

• Une clause HAVING

• Une clause GROUP BY

• Une clause ORDER BY

• Fonctions d'agrégation

• Méthodes

Syntaxe

<instruction create view> ::=     CREATE VIEW <nom de vue> [ ( <liste à virgules de noms de colonnes> ) ]     AS <expression de sélection> [ WITH CHECK OPTION ] <nom de vue> ::=     [ <nom de schéma> . ] <identificateur SQL>

Exemple

L'instruction suivante crée une vue V1 à partir d'une table T1. Les colonnes de la vue sont nommées C1 et C2.

CREATE VIEW V1(C1,C2)     AS SELECT  C8+C9, C6 FROM T1 WHERE C8 < C9;

ALTER VIEW

L'instruction ALTER VIEW modifie une vue sans perdre les vues dépendantes ni les GRANT existants. Cette instruction peutservir à modifier le nom d'une vue, les colonnes qui la composent, ou sa contrainte WITH CHECK OPTION.

Notez qu'après l'exécution de ALTER VIEW, il peut exister des vues dépendantes qui ne sont plus valides.

Syntaxe

<instruction alter view> ::=     ALTER VIEW <nom de vue> [ ( <liste à virgules de noms de colonnes> ) ]      AS <expression de sélection> [ WITH CHECK OPTION ]

Exemple

Les instructions suivantes montrent comment l'instruction ALTER VIEW peut servir à valider une vue invalide. Les deuxpremières instructions créent une table, puis une vue basée sur cette table. La troisième instruction, SELECT, réussit.

10 Blackfish SQL

101

10

Page 106: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

CREATE TABLE T1 (C1 INT, C2 VARCHAR);CREATE VIEW V1 AS SELECT C1, C2 FROM T1;SELECT * FROM V1;

L'instruction suivante change le nom d'une colonne de la table.

ALTER TABLE T1 ALTER COLUMN C1 RENAME TO ID;

La prochaine instruction SELECT échoue car il n'y a plus de colonne C1 dans la table T1, colonne accédée par la vue V1.

SELECT * FROM V1;

L'instruction suivante ALTER VIEW change la définition de la vue, de sorte que la prochaine instruction SELECT réussit.

ALTER VIEW V1 (C1, C2) AS SELECT ID, C2 FROM T1;SELECT * FROM V1;

DROP VIEW

L'instruction DROP VIEW supprime la vue nommée. Elle échoue si la vue a des dépendances.

• L'option RESTRICT équivaut à ne pas spécifier d'option : l'instruction échoue si la vue a des dépendances.

• L'option CASCADE supprime la vue et toutes les vues dépendantes.

Syntaxe

<instruction drop view> ::=     DROP VIEW <nom de vue> [ CASCADE | RESTRICT ]

Exemple

Le code suivant crée une table et deux vues :

CREATE TABLE T1 (C1 INT, C2 VARCHAR);CREATE VIEW V1 AS SELECT C1, C2 FROM T1;CREATE VIEW V2 AS SELECT C1, C2 FROM V1;

L'instruction suivante échoue car la vue V1 a une vue dépendante (V2).

DROP VIEW V1 RESTRICT;

L'instruction suivante réussit et les vues V1 et V2 sont supprimées.

DROP VIEW V1 CASCADE;

CREATE INDEX

L'instruction CREATE INDEX crée un index pour une table Blackfish SQL. Chaque colonne peut être triée en ordre croissant oudécroissant. L'ordre croissant est utilisé par défaut.

Syntaxe

<instruction create index> ::=       CREATE [UNIQUE] [CASEINSENSITIVE] INDEX <nom d'index>           ON <nom de table> ( <liste à virgules d'éléments d'index> )<nom de table> ::=      [ <nom de schéma> . ] <identificateur SQL>                                                        <nom d'index> ::=       <identificateur SQL>                                                        <élément d'index> ::=       <nom de colonne> [ DESC|ASC ]

Exemple

Blackfish SQL 10

102

10

Page 107: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

L'instruction suivante génère un index non unique, faisant la distinction majuscules/minuscules, trié en ordre croissant sur lacolonne Item de la table Orders :

CREATE INDEX OrderIndex ON Orders (Item ASC);

DROP INDEX

L'instruction DROP INDEX supprime un index pour une table Blackfish SQL.

Syntaxe

<instruction drop index> ::=      DROP INDEX <nom d'index> ON <nom de table>

Exemple

L'instruction suivante supprime l'index OrderIndex de la table Orders :

DROP INDEX OrderIndex ON Orders;

CREATE METHOD

L'instruction CREATE METHOD prend une procédure stockée ou une FDU, implémentée en Java ou dans un langage .NET(comme Delphi, C# ou VB.NET), et la rend disponible pour son utilisation dans Blackfish SQL. Les fichiers des classes utiliséesdans le code doivent être ajoutés au chemin des classes du processus du serveur Blackfish SQL. Voir FDU et procéduresstockées pour savoir comment implémenter les procédures stockées et les FDU pour Blackfish SQL.

Pour créer une méthode dans un schéma particulier, spécifiez le nom du schéma comme partie du nom de la table :

CREATE METHOD MONSCHEMA.MAMETHODE AS . . .

Si vous ne spécifiez pas de nom de schéma, la méthode est attribuée à un schéma selon les règles ci-après :

• Si vous avez créé un schéma par défaut personnel (un schéma ayant comme nom votre nom d'utilisateur), la méthode est créée dans ce schéma.

• Si vous n'avez pas créé de schéma par défaut personnel, la méthode est créée dans le schéma DEFAULT_SCHEMA.

Voir CREATE SCHEMA pour de plus amples informations sur les schémas. La clause AUTHORIZATION provoque l'exécution dela procédure stockée appelée comme si le véritable utilisateur était l'utilisateur spécifié dans la clause AUTHORIZATION. Si cetteclause est omise, pendant les appels des méthodes, l'utilisateur est current_user. Cette fonctionnalité permet à l'utilisateur encours d'accéder à des tables et à des vues qui lui auraient été inaccessibles autrement. Syntaxe

<instruction create method> ::=     CREATE METHOD <nom de méthode> [AUTHORIZATION <nom d'utilisateur>]         AS <définition de méthode>                                                          <nom de méthode> ::=     [ <nom de schéma> . ] <identificateur SQL>                                                        <nom de schéma> ::= <identificateur SQL>                                                        <définition de méthode> ::= <littéral chaîne>

Exemple

CREATE METHOD ABS AS 'MathClass.abs';

DROP METHOD

L'instruction DROP METHOD supprime une procédure stockée ou une FDU, la rendant indisponible pour son utilisation dans

10 Blackfish SQL

103

10

Page 108: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Blackfish SQL.

Syntaxe

<instruction drop method> ::=      DROP METHOD <nom de méthode>

Exemple

DROP METHOD ABS;

CREATE CLASS

L'instruction CREATE CLASS rend toutes les méthodes statiques publiques d'une classe accessibles à Blackfish SQL en tantque procédures stockées ou FDU. Vous devez vous assurer que les fichiers des classes utilisées dans le code font partie duchemin des classes du processus du serveur Blackfish SQL avant usage. Pour de plus amples informations, voir le chapitreProcédures stockées et FDU.

La clause AUTHORIZATION provoque l'exécution de la procédure stockée appelée comme si le véritable utilisateur étaitl'utilisateur spécifié dans la clause AUTHORIZATION. Si cette clause est omise, pendant les appels des méthodes, l'utilisateurest current_user. Cette fonctionnalité permet à l'utilisateur en cours d'accéder à des tables et à des vues qui lui auraient étéinaccessibles autrement.

Syntaxe

<instruction create class> ::=    CREATE CLASS <nom de classe> [AUTHORIZATION <nom d'utilisateur>]         AS <définition de classe>                                                           <nom de classe> ::=    [ <nom de schéma> . ] <identificateur SQL>                                                         <nom de schéma> ::= <identificateur SQL>                                                         <définition de classe> ::= <littéral chaîne>

Exemples

CREATE CLASS MATH AS 'mscorlib::System.Math';

Après l'exécution de l'instruction ci-dessus, toutes les méthodes statiques publiques de System.Math peuvent être appeléesdepuis SQL. Notez que les noms de méthodes distinguent les majuscules et les minuscules.

Utilisation

L'instruction suivante appelle la méthode Abs() de System.Math :

SELECT * FROM CUSTOMER WHERE MATH."Abs"(AGE - 50) < 5;

DROP CLASS

L'instruction DROP CLASS supprime une classe stockée, la rendant indisponible pour son utilisation dans Blackfish SQL.

Syntaxe

<instruction drop class> ::=   DROP CLASS <nom de méthode>

Exemple

DROP CLASS MATH;

Blackfish SQL 10

104

10

Page 109: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

CREATE TRIGGER

L'instruction CREATE TRIGGER crée un déclencheur au niveau des lignes d'une table. Vous devez vous assurer que les classespeuvent être chargées par le processus du serveur Blackfish SQL. Voir Déclencheurs pour Blackfish SQL pour savoir commentimplémenter les méthodes déclencheur et s'assurer que les classes de ces méthodes peuvent être chargées.

Syntaxe

<instruction create trigger> ::= CREATE TRIGGER  <nom de déclencheur>      <moment d'action du déclencheur> <nom d'action du déclencheur>     ON <nom de table> AS <spécif. du déclencheur> <nom de déclencheur> ::=  <identificateur SQL> <nom de table> ::=  <identificateur SQL> <moment d'action du déclencheur> ::=  <BEFORE | AFTER> <nom d'action du déclencheur> ::=  <INSERT | UPDATE | DELETE > Blackfish SQL pour Java : <spécif. du déclencheur> ::=  "[<package>.]<nom de classe>.<nom de méthode>" Blackfish SQL pour Windows : <spécif. du déclencheur> ::=  "<nom-assemblage>::[<espace-nommage>.]<nom-classe>.<nom-méthode>"

Exemples

Blackfish SQL pour Windows :

CREATE TRIGGER VALIDATE_CUSTOMER BEFORE INSERT ON CUSTOMER AS  OrderEntryAssembly::OrderEntry.Customers.ValidateCustomer

Blackfish SQL pour Java :

CREATE TRIGGER VALIDATE_CUSTOMER BEFORE INSERT ON CUSTOMER AS OrderEntry.Customers.validateCustomer

DROP TRIGGER

L'instruction DROP TRIGGER supprime un déclencheur, le rendant indisponible pour son utilisation dans Blackfish SQL.

Syntaxe

<instruction drop trigger> ::= DROP TRIGGER  <nom de déclencheur>       ON <nom de table>   <nom de déclencheur> ::= <identificateur SQL>   <nom de table> ::= <identificateur SQL>

Exemple

DROP TRIGGER VALIDATE_CUSTOMER on CUSTOMER

Instructions de contrôle des transactions

COMMIT

L'instruction COMMIT valide la transaction en cours. Elle n'a d'effet que si AUTOCOMMIT est désactivée.

Syntaxe

<instruction commit> ::=       COMMIT [WORK]

ROLLBACK

L'instruction ROLLBACK annule la transaction en cours. Cette instruction est sans effet lorsque AUTOCOMMIT est activée.

10 Blackfish SQL

105

10

Page 110: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Syntaxe

<instruction rollback> ::=       ROLLBACK [WORK]

SET AUTOCOMMIT

L'instruction SET AUTOCOMMIT modifie le mode de validation automatique. A la création d'une connexion JDBC, Autocommit estactivée (ON).

Ce mode est aussi directement contrôlable via l'instance JDBC Connection.

Syntaxe

<instruction set autocommit> ::=     SET AUTOCOMMIT { ON | OFF };

SET TRANSACTION

L'instruction SET TRANSACTION définit les propriétés de la transaction suivante. Vous pouvez l'utiliser pour spécifier le niveaud'isolation et pour indiquer si la transaction est en lecture-écriture ou en lecture seule. Voir Architecture du système pour unedescription détaillée de la façon dont Blackfish SQL gère les transactions.

Cette commande doit être émise lorsqu'aucune transaction n'est ouverte. Elle s'applique à la transaction qui suit et ne démarrepas de transaction par elle-même.

Pour comprendre les niveaux d'isolation, vous devez connaître les termes suivants :

• Une lecture sale se produit lorsqu'une ligne modifiée par une transaction est lue par une autre transaction avant que les modifications apportées à cette ligne ne soient validées.

• Une lecture non reproductible se produit lorsqu'une transaction lit une ligne, qu'une seconde transaction modifie la ligne et que la première transaction relit la même ligne en obtenant des valeurs différentes de la première fois.

• Une lecture fantôme se produit lorsqu'une transaction lit toutes les lignes satisfaisant une condition WHERE, qu'une seconde transaction insère une ligne satisfaisant cette condition WHERE et que la première transaction relit avec la même condition en extrayant la ligne "fantôme" supplémentaire par rapport à la première lecture.

Blackfish SQL offre les niveaux d'isolation des transactions suivants : TRANSACTION_READ_UNCOMMITTED autorise leslectures sales, les lectures non reproductibles et les lectures fantôme. Si l'une des modifications est annulée par rollback, la ligneextraite par la seconde transaction est invalidée. Ce niveau d'isolation ne pose pas de verrou ligne pour les opérations delecture. Et il ignore les verrous ligne exclusifs posés par les autres connexions ayant inséré ou mis à jour une ligne.

TRANSACTION_READ_COMMITTED empêche les lectures sales ; les lectures non reproductibles et les lectures fantôme sontautorisées. Ce niveau d'isolation interdit à une transaction de lire une ligne contenant des modifications non validées. Ce niveaune pose pas de verrou ligne pour les opérations de lecture, mais bloque à la lecture d'une ligne sur laquelle une autretransaction a posé un verrou exclusif.

TRANSACTION_REPEATABLE_READ autorise les lectures sales et les lectures non reproductibles mais empêche les lecturesfantôme. Il pose des verrous ligne partagés pour les opérations de lecture. Ce niveau garantit un accès à des donnéestransactionnellement cohérentes, sans la simultanéité réduite propre à TRANSACTION_SERIALIZABLE, mais induit uneaugmentation de la charge de verrouillage.

TRANSACTION_SERIALIZABLE fournit aux transactions une capacité complète de sérialisation au risque de réduire lasimultanéité et d'augmenter la probabilité d'apparition de verrous mortels.

Syntaxe

<instruction set transaction> ::=     SET TRANSACTION <liste à virgules d'options de transaction>

Blackfish SQL 10

106

10

Page 111: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

                                                        <option de transaction> ::=    READ ONLY  | READ WRITE  | ISOLATION LEVEL <niveau d'isolation>                                                        <niveau d'isolation> ::=    READ UNCOMMITTED  | READ COMMITTED  | REPEATABLE READ  | SERIALIZABLE

Exemple

Dans l'exemple suivant, la sélection à partir de T1 constitue une lecture sale ; ce qui signifie que les données ne peuvent pas, àce stade, être validées par un autre utilisateur. Après le second COMMIT, le niveau d'isolation revient à ce qui a été spécifié pourla session.

COMMIT;SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;SELECT * FROM T1;COMMIT;

Instructions de manipulation des données

SELECT

Une instruction SELECT extrait des données à partir d'une ou de plusieurs tables. Le mot clé DISTINCT facultatif élimine leslignes en double de l'ensemble de résultats. Le mot clé ALL (par défaut) renvoie toutes les lignes, y compris les doublons. Lesdonnées peuvent être facultativement triées en utilisant ORDER BY. Les lignes lues peuvent être facultativement verrouilléespour un UPDATE à venir en spécifiant FOR UPDATE.

Syntaxe

<instruction de sélection> ::=     <expression de table> [ ORDER BY <liste d'éléments de tri> ]        [ FOR UPDATE|FOR READ ONLY ] <expression de table> ::=      <expression de table> UNION [ ALL ] <expression de table>    | <expression de table> EXCEPT [ ALL ] <expression de table>    | <expression de table> INTERSECT [ ALL ] <expression de table>    | <expression de jointure>    | <expression de sélection>    | ( <expression de table> ) <liste d'éléments de tri> ::= <partie tri> [ ASC|DESC ] <partie tri> ::=     <littéral entier> | <nom de colonne> | <expression> <expression de sélection> ::=    SELECT [ ALL|DISTINCT ] <liste à virgules d'éléments de sélection>    FROM <liste à virgules de références de tables>        [ WHERE <expression conditionnelle> ]        [ GROUP BY <liste à virgules de références de colonnes> ]        [ HAVING <expression conditionnelle> ]

Exemples

L'instruction suivante trie la sortie selon la première colonne en ordre descendant.

SELECT Item FROM Orders ORDER BY 1 DESC;

L'instruction suivante fait un tri selon la colonne calculée CALC :

10 Blackfish SQL

107

10

Page 112: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

SELECT CustId, Amount*Price+500,00     AS CALC FROM Orders     ORDER BY CALC;

L'instruction suivante trie la sortie selon l'expression Amount*Price :

SELECT CustId, Amount     FROM Orders     ORDER BY Amount*Price;

SELECT INTO

Une instruction SELECT INTO est une instruction SELECT ayant comme résultat une seule ligne dont les valeurs sontrécupérées dans les paramètres de sortie. Une erreur est générée si SELECT donne un résultat comportant plusieurs lignes ouconstitué d'un ensemble vide.

Syntaxe

<instruction de sélection d'une seule ligne> ::=    SELECT [ ALL|DISTINCT ] <liste à virgules d'éléments de sélection>        INTO <liste à virgules de paramètres>        FROM <liste à virgules de références de tables>            [ WHERE <expression conditionnelle> ]            [ GROUP BY <liste à virgules de références de colonnes> ]            [ HAVING <expression conditionnelle> ]

Exemple

Dans l'instruction suivante, les deux premiers marqueurs de paramètres indiquent les paramètres de sortie servant à récupérerle résultat de la requête :

SELECT CustId, Amount     INTO ?, ?      FROM Orders      WHERE CustId=? ;

INSERT

Une instruction INSERT insère des lignes dans une table d'une base de données Blackfish SQL. L'instruction INSERT contient laliste des colonnes et des valeurs qui leur sont associées. Les colonnes n'apparaissant pas dans l'instruction sont initialisées enutilisant leurs valeurs par défaut.

Syntaxe

<instruction insert> ::=    [ SELECT AUTOINCREMENT FROM ]    INSERT INTO <nom de table> [ ( <liste à virgules de noms de colonnes> ) ]        [ <expression table insertion>|DEFAULT VALUES ] <nom de table> ::=      [ <nom de schéma> . ]<identificateur SQL> <expression table insertion> ::=      <expression de sélection>  |  VALUES ( <liste à virgules d'expressions> )

Exemple 1

L'instruction suivante insère une ligne chaque fois qu'elle est exécutée. Les colonnes non mentionnées sont initialisées enutilisant leurs valeurs par défaut. Si une colonne n'a pas de valeur par défaut, elle est initialisée à NULL.

INSERT INTO Orders (CustId, Item) VALUES (?,?);

Exemple 2

Blackfish SQL 10

108

10

Page 113: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

L'instruction suivante trouve toutes les commandes du client ayant un CustId de 123, et insère la colonne Item de cescommandes dans la table ResTable.

INSERT INTO ResTable     SELECT Item FROM Orders     WHERE CustId = 123;

Exemple 3

L'instruction suivante insère une ligne chaque fois qu'elle est exécutée. Pour ce dernier cas, la colonne CustId de la tableOrders n'est pas spécifiée. Cela suppose que CustId soit une colonne AUTOINCREMENT dont le moteur SQL génèreautomatiquement la valeur. Cet exemple spécifie SELECT AUTOINCREMENT FROM, la valeur générée est donc renvoyéecomme ensemble de résultats. Si la table Orders ne contient pas de colonne AUTOINCREMENT, l'ensemble de résultats seraconstitué des valeurs INTERNALROW pour les lignes insérées.

SELECT AUTOINCREMENT FROM INSERT INTO Orders (Item) VALUES (?)          

UPDATE

L'instruction UPDATE est utilisée pour modifier des données existantes. Les colonnes à modifier sont explicitement listées.Toutes les lignes où la clause WHERE a la valeur TRUE sont modifiées. Si aucune clause WHERE n'est indiquée, toutes les lignesde la table sont modifiées.

Syntaxe

<instruction update> ::=      UPDATE <nom de table>       TO <liste à virgules d'affectations de mise à jour>    [ WHERE <expression conditionnelle> ]                                                        <nom de table> ::=      [ <nom de schéma> . ]<identificateur SQL> <affectation de mise à jour> ::=      <référence de colonne> = <expression de mise à jour> <expression update> ::=      <expression scalaire>    | DEFAULT    | NULL

Exemple 1

L'instruction suivante transforme toutes les commandes passées par le client 123 en commandes du client 500 :

UPDATE Orders SET CustId = 500 WHERE CustId = 123;

Exemple 2

L'instruction suivante augmente de 1 le montant de toutes les commandes de la table :

UPDATE Orders SET Amount = Amount + 1;

Exemple 3

L'instruction suivante limite le prix de tous les appareils photo sous-marins jetables à 7,25 euros :

UPDATE Orders SET Price = 7,25     WHERE Price > 7,25 AND Item = 'UWCamaras';

10 Blackfish SQL

109

10

Page 114: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

DELETE

Une instruction DELETE supprime des lignes dans une table d'une base de données Blackfish SQL. Si aucune clause WHEREn'est indiquée, toutes les lignes sont supprimées. Sinon, seules les lignes correspondant à l'expression WHERE sont supprimées.

Syntaxe

<instruction delete> ::=      DELETE FROM <nom de table>    [ WHERE <expression conditionnelle> ]<nom de table> ::=      [ <nom de schéma> . ]<identificateur SQL>

Exemple

L'instruction suivante supprime toutes les commandes de shorts dans la table Orders.

DELETE FROM Orders WHERE Item = 'Shorts';

CALL

Une instruction CALL appelle une procédure stockée.

Syntaxe

<instruction call>  ::=     [ ? = ] CALL <nom de méthode> ( <liste à virgules d'expressions> )

Exemple 1

Le marqueur de paramètre indique l'emplacement du paramètre de sortie servant à récupérer le résultat de la procédurestockée.

?=CALL ABS(-765);

Exemple 2

La méthode implémentant IncreaseSalaries met à jour la table salaries avec un pourcentage d'augmentation accordé àtous les employés. Un objet de connexion sera transmis implicitement à la méthode. Un updateCount de toutes les lignesaffectées par IncreaseSalaries est renvoyé par Statement.executeUpdate.

CALL IncreaseSalaries(10);

LOCK TABLE

L'instruction LOCK TABLE verrouille explicitement une table. Les verrous ne sont libérés qu'au moment où la transaction estvalidée (commit) ou annulée (rollback).

Syntaxe

<instruction lock>  ::=    `LOCK <liste à virgules de noms de tables><nom de table> ::=      [ <nom de schéma> . ]<identificateur SQL>

Exemple

L'instruction suivante verrouille les tables Orders et LineItems.

LOCK Orders, LineItems;

Instructions de sécurité

Blackfish SQL 10

110

10

Page 115: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

CREATE USER

L'instruction CREATE USER ajoute à la base de données l'utilisateur nommé et le mot de passe qui lui est associé. Seul unadministrateur peut créer des utilisateurs.

Remarque: Le mot de passe que vous saisissez distingue toujours les majuscules des minuscules. Le nom d'utilisateur nedistingue pas les majuscules des minuscules.

Par défaut, un utilisateur nouvellement créé a tous les privilèges sur les bases de données sauf ADMINISTRATOR. Ce sont lesprivilèges STARTUP, WRITE, CREATE, DROP, CREATE ROLE et CREATE SCHEMA. Si vous souhaitez retirer certains privilèges àun utilisateur, utilisez REVOKE.

Syntaxe

<instruction create user> ::=     CREATE USER <nom d'utilisateur> PASSWORD <identificateur SQL>

Exemple

CREATE USER jmatthews PASSWORD "@nyG00dPas2d";

ALTER USER

L'instruction ALTER USER définit un nouveau mot de passe pour un utilisateur existant. Seul un administrateur ou l'utilisateurnommé peut modifier un mot de passe.

Remarque: Le mot de passe que vous saisissez est stocké tout en majuscules sauf si vous le saisissez entre guillemets. Il estconseillé de toujours utiliser des guillemets lors de la spécification d'un mot de passe.

Syntaxe

<instruction alter user> ::=     ALTER USER <nom d'utilisateur> PASSWORD <identificateur SQL>

Exemple

ALTER USER GSMITH SET PASSWORD "usethisOnen0w";

DROP USER

L'instruction DROP USER supprime un utilisateur et tous les objets dont il est propriétaire.

• Utilisée avec RESTRICT ou sans aucune option, l'instruction échoue si l'utilisateur possède des objets (tables, vues ou méthodes).

• Utilisée avec CASCADE, elle supprime l'utilisateur et tous les objets en sa possession.

Syntaxe

<instruction drop user> ::=     DROP USER <nom d'utilisateur> [ CASCADE|RESTRICT ]

Exemple

L'instruction suivante supprime l'utilisateur gsmith et toutes les tables, vues et méthodes qu'il possède.

DROP USER gsmith CASCADE;

CREATE ROLE

L'instruction CREATE ROLE crée un rôle nommé.

10 Blackfish SQL

111

10

Page 116: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

L'utilisation des rôles implique quatre étapes :

• Créer un rôle avec l'instruction CREATE ROLE.

• Attribuer au rôle des privilèges avec l'instruction GRANT.

• Attribuer le rôle à un ou plusieurs utilisateurs avec l'instruction GRANT (cela autorise ces derniers à utiliser le rôle).

• Un utilisateur autorisé bénéficie des privilèges d'un rôle avec l'instruction SET ROLE.

Pour créer un rôle, l'utilisateur doit avoir le privilège système CREATE ROLE. Tous les utilisateurs le possèdent par défaut, maisce privilège peut être retiré explicitement. Syntaxe

<instruction create role> ::=     CREATE ROLE <nom de rôle>

Exemple

CREATE ROLE salesperson;

SET ROLE

L'instruction SET ROLE rend actif le rôle nommé. L'utilisateur en cours acquiert tous les privilèges attribués au rôle. Utilisez SETROLE NONE pour désactiver le rôle en cours sans en définir un autre.

Remarque: Cette commande doit être émise lorsqu'aucune transaction n'est active. Le rôle reste actif jusqu'à la fin de lasession ou jusqu'à l'émission d'une autre commande SET ROLE.

Syntaxe

<instruction set role> ::=     SET ROLE <spécification de rôle>                                                        <spécification de rôle> ::=    NONE  | <nom de rôle>

Exemple

L'instruction suivante rend actif le rôle Manager :

SET ROLE Manager;

L'instruction suivante supprime le rôle actif et n'active pas d'autre rôle :

SET ROLE NONE;

DROP ROLE

L'instruction DROP ROLE supprime le rôle spécifié.

• Lorsque l'instruction DROP ROLE est utilisée avec CASCADE, tous les privilèges qui avaient été attribués à travers ce rôle sont retirés.

• Lorsque l'instruction DROP ROLE est utilisée avec RESTRICT, l'instruction échoue si le rôle est attribué à des utilisateurs ou à des rôles.

• Emettre l'instruction DROP ROLE sans aucune option revient à émettre l'instruction DROP ROLE avec l'option RESTRICT.

Syntaxe

<instruction drop role> ::=      DROP ROLE <nom de rôle> [ CASCADE|RESTRICT ]

Exemple

Blackfish SQL 10

112

10

Page 117: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

L'instruction suivante supprime le rôle Sales. Tous les privilèges accordés aux utilisateurs ou à d'autres rôles à travers le rôleSales sont retirés.

DROP ROLE Sales CASCADE;

GRANT

L'instruction GRANT réalise les trois actions suivantes :

• Elle accorde des privilèges comme INSERT ou SELECT, touchant des objets comme les tables ou les méthodes, à des utilisateurs, à des rôles ou à PUBLIC.

• Elle accorde des privilèges touchant les bases de données, comme STARTUP ou RENAME, à des utilisateurs ou à des rôles.

• Elle accorde des rôles à des utilisateurs ou à des rôles.

Options de l'instruction GRANT :

• Lorsque des privilèges sur les objets sont accordés WITH GRANT OPTION, celui qui reçoit ces privilèges a le pouvoir de les transmettre à d'autres utilisateurs.

• Lorsque des privilèges sur les bases de données ou lorsque des rôles sont accordés avec l'option ADMINISTRATOR, celui qui reçoit ces privilèges ou ces rôles a le pouvoir de les transmettre à d'autres utilisateurs.

• Le privilège ADMINISTRATOR sur une base de données accorde les privilèges STARTUP, WRITE, CREATE, DROP, RENAME, CREATE ROLE et CREATE SCHEMA. Lorsque ces privilèges sont acquis via le privilège ADMINISTRATOR, ils ne peuvent être retirés qu'avec le retrait du privilège ADMINISTRATOR. En d'autres termes, si vous accordez ADMINISTRATOR à un utilisateur et lui retirez ensuite CREATE, cet utilisateur possède toujours les privilèges CREATE.

Lorsque vous spécifiez l'objet des privilèges, utilisez le mot clé optionnel TABLE pour accorder des privilèges soit sur des tablessoit sur des vues. N'utilisez pas le mot clé VIEW dans ce contexte. Vous pouvez aussi accorder des privilèges sur une méthodeen utilisant le mot clé obligatoire METHOD. Il est possible d'accorder les privilèges suivants sur les bases de données :

Privilège Description

ADMINISTRATOR Accorde les privilèges startup, write, create, drop, rename, create role et create schema

STARTUP L'utilisateur peut démarrer la base de données

WRITE L'utilisateur peut écrire dans la base de données

CREATE L'utilisateur peut créer des tables

DROP L'utilisateur peut supprimer des tables

RENAME L'utilisateur peut renommer des tables

CREATE ROLE L'utilisateur peut créer des rôles

CREATESCHEMA

L'utilisateur peut créer des schémas

CREATE ROLE et CREATE SCHEMA sont accordés par défaut lors de la création de l'utilisateur.

Syntaxe

<instruction grant> ::=      <instruction accordant des privilèges sur base de données>    | <instruction accordant des privilèges sur objet>    | <instruction accordant des rôles> <instruction accordant des privilèges sur base de données> ::=      GRANT <liste à virgules de privilèges sur base de données>      TO <liste à virgules de receveurs>      [ WITH ADMIN OPTION ] <instruction accordant des privilèges sur objet> ::=

10 Blackfish SQL

113

10

Page 118: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

      GRANT <privilèges sur objet>      ON <objet des privilèges>      TO <liste à virgules de receveurs>      [ WITH GRANT OPTION ]      [ GRANTED BY <donneur> ] <instruction accordant des rôles> ::=      GRANT <liste à virgules de noms de rôles>      TO <liste à virgules de receveurs>      [ WITH ADMIN OPTION ]      [ GRANTED BY <donneur> ] <privilège sur base de données> ::=      STARTUP    | ADMINISTRATOR    | WRITE    | CREATE    | DROP    | RENAME    | CREATE ROLE    | CREATE SCHEMA <receveur> ::=      PUBLIC    | <nom d'utilisateur>    | <nom de rôle> <privilèges sur objet> ::=      ALL PRIVILEGES    | <liste à virgules de privilèges> <privilège> ::=      SELECT    | INSERT [ ( <liste à virgules de noms de colonnes> ) ]    | UPDATE [ ( <liste à virgules de noms de colonnes> ) ]    | REFERENCES [ ( <liste à virgules de noms de colonnes> ) ]    | DELETE    | EXECUTE <objet des privilèges> ::=      [TABLE] <nom de table ou nom de vue>    | METHOD <nom de méthode> <donneur> ::=      CURRENT_USER    | CURRENT_ROLE

Exemples

Dans l'exemple suivant, USER_1 reçoit les privilèges SELECT et INSERT sur la table T1. USER_2 reçoit les privilèges SELECTsur la table T1 car le privilège SELECT a été accordé à ROLE_B et ROLE_B attribué à USER_2. Cependant, USER_2 ne peututiliser le privilège SELECT qu'après avoir activé ROLE_B à l'aide d'une instruction SET ROLE.

GRANT SELECT ON TABLE T1 TO USER_1, ROLE_B;GRANT INSERT ON T1 TO USER_1; GRANT ROLE_B TO USER_2;

REVOKE

L'instruction REVOKE réalise les opérations suivantes :

• Elle retire des privilèges comme INSERT ou SELECT, touchant des objets comme les tables ou les méthodes, à des utilisateurs, à des rôles ou à PUBLIC.

Blackfish SQL 10

114

10

Page 119: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

• Si l'utilisateur ou le rôle avait accordé à d'autres utilisateurs le privilège désormais retiré, CASCADE retire les privilèges à ces utilisateurs également. Si des vues dépendent des privilèges retirés, elles sont supprimées.

• Lorsque l'instruction REVOKE inclut RESTRICT, l'instruction échoue si le receveur avait accordé à d'autres les privilèges acquis.

• Elle retire des privilèges touchant les bases de données, comme STARTUP ou RENAME, à des utilisateurs ou à des rôles.

• Elle retire des rôles à des utilisateurs ou à des rôles.

• Elle retire l'option ADMIN d'un rôle sans retirer le rôle lui-même.

• REVOKE GRANT OPTION FOR privilège retire la possibilité d'accorder aux autres le privilège spécifié sans retirer le privilège lui-même. REVOKE ADMIN OPTION FOR rôle retire la possibilité d'accorder le rôle spécifié sans retirer le rôle lui-même.

Lorsque vous spécifiez l'objet des privilèges, utilisez le mot clé optionnel TABLE pour retirer des privilèges soit sur des tables soitsur des vues. N'utilisez pas le mot clé VIEW dans ce contexte. Vous pouvez aussi retirer des privilèges sur une méthode enutilisant le mot clé obligatoire METHOD. Syntaxe

<instruction revoke> ::=      <instruction retirant des privilèges sur base de données>    | <instruction retirant des privilèges sur objet>    | <instruction retirant des rôles> <instruction retirant des privilèges sur base de données> ::=      REVOKE <liste à virgules de privilèges sur base de données>      FROM <liste à virgules de receveurs> <instruction retirant des privilèges sur objet> ::=      REVOKE [ GRANT OPTION FOR ] <privilèges sur objet>      ON <objet des privilèges>      FROM <liste à virgules de receveurs>      [ GRANTED BY <donneur> ]      [ CASCADE|RESTRICT ] <instruction retirant des rôles> ::=      REVOKE [ ADMIN OPTION FOR ] <liste à virgules de noms de rôles>      FROM <liste à virgules de receveurs>      [ GRANTED BY <donneur> ]      [ CASCADE|RESTRICT ] <privilège sur base de données> ::=      STARTUP    | ADMINISTRATOR    | WRITE    | CREATE    | DROP    | RENAME    | CREATE ROLE    | CREATE SCHEMA <receveur> ::=      PUBLIC    | <nom d'utilisateur>    | <nom de rôle> <privilèges sur objet> ::=      ALL PRIVILEGES    | <liste à virgules de privilèges> <privilège> ::=      SELECT    | INSERT [ ( <liste à virgules de noms de colonnes> ) ]    | UPDATE [ ( <liste à virgules de noms de colonnes> ) ]    | REFERENCES [ ( <liste à virgules de noms de colonnes> ) ]    | DELETE

10 Blackfish SQL

115

10

Page 120: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

    | EXECUTE <objet des privilèges> ::=      [TABLE] <nom de table ou nom de vue>    | METHOD <nom de méthode> <donneur> ::=      CURRENT_USER    | CURRENT_ROLE

Exemple 1

Dans tous les exemples suivants, le nom précédant le signe deux points est le nom de l'utilisateur qui exécute l'instruction.

Les instructions GRANT ci-après sont émises par les utilisateurs U1, U2 et U3 ; elles définissent le contexte des exemples qui lessuivent :

Instruction 1 :

U1 : GRANT SELECT ON TABLE T1 TO U2 WITH GRANT OPTION;

Instruction 2 :

U2 : GRANT SELECT ON TABLE T1 TO U3 WITH GRANT OPTION;

Instruction 3 :

U3 : GRANT SELECT ON TABLE T1 TO U4 WITH GRANT OPTION;

Exemple 1a :

Ci-dessous, l'option RESTRICT provoque l'échec de l'instruction REVOKE car, dans Instruction 2, l'utilisateur U2 a exercé leprivilège acquis dans Instruction 1.

U1 : REVOKE SELECT ON TABLE T1 FROM U2 RESTRICT;

Exemple 1b :

L'exemple suivant réussit et les instructions 1, 2 et 3 sont annulées.

U1 : REVOKE SELECT ON TABLE T1 FROM U2 CASCADE;

Exemple 1c :

Ci-dessous, l'option RESTRICT provoque l'échec de l'instruction REVOKE car, dans Instruction 2, l'utilisateur U2 a exercé leprivilège GRANT OPTION acquis dans Instruction 1.

U1 : REVOKE GRANT OPTION FOR SELECT ON TABLE T1 FROM U2 RESTRICT;

Exemple 1d :

L'instruction suivante réussit et annule les instructions 2 et 3. U2 conserve le privilège SELECT sur T1 mais ne peut accorder ceprivilège à d'autres.

U1 : REVOKE GRANT OPTION FOR SELECT ON TABLE T1 FROM U2 CASCADE;

Exemple 2

Les instructions GRANT et CREATE ci-après sont émises par les utilisateurs U1, U2 et U3 ; elles définissent le contexte desexemples qui les suivent. Le nom précédant le signe deux points est le nom de l'utilisateur ayant exécuté l'instruction.

Instruction 1 :

U1 : GRANT SELECT ON TABLE T1 TO U2 WITH GRANT OPTION;

Instruction 2 :

U2 : GRANT SELECT ON TABLE T1 TO U3 WITH GRANT OPTION;

Instruction 3 :

Blackfish SQL 10

116

10

Page 121: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

U3 : GRANT SELECT ON TABLE T1 TO U4 WITH GRANT OPTION;

Instruction 4 :

U2 : CREATE VIEW V2 AS SELECT A, B FROM T1;

Instruction 5 :

U3 : CREATE VIEW V3 AS SELECT A, B FROM T1;

Exemple 2a :

L'instruction suivante réussit et annule les instructions 1, 2 et 3. De plus, les vues V2 et V3 sont supprimées car U2 et U3 nebénéficient plus des privilèges SELECT sur T1 qui sont nécessaires pour les vues.

U1 : REVOKE SELECT ON TABLE T1 FROM U2 CASCADE

Exemple 2b :

L'instruction suivante réussit et annule les instructions 2 et 3. L'utilisateur U2 conserve le privilège SELECT sur T1 mais ne peutaccorder ce privilège à d'autres. De plus, la vue V3 est supprimée car U3 n'a plus le privilège SELECT sur T1. La vue V2 n'estpas supprimée car U2 possède toujours les privilèges SELECT sur T1.

U1 : REVOKE GRANT OPTION FOR SELECT ON TABLE T1 FROM U2 CASCADE

Exemple 3

Les instructions GRANT et CREATE ci-après sont émises par les utilisateurs U1, U2 et U3 ; elles définissent le contexte desexemples qui les suivent. Le nom précédant le signe deux points est le nom de l'utilisateur ayant exécuté l'instruction.

Instruction 1 :

U1 : CREATE ROLE R1; 

Instruction 2 :

U1 : GRANT SELECT ON TABLE T1 TO R1;

Instruction 3 :

U1 : GRANT R1 TO U2 WITH ADMIN OPTION;

Instruction 4 :

U2 : GRANT R1 TO U3 WITH ADMIN OPTION;

Instruction 5 :

U3 : GRANT R1 TO U4 WITH ADMIN OPTION;

Exemple 3a :

L'instruction suivante échoue car l'utilisateur U2 a exercé les privilèges acquis en recevant le rôle R1.

U1 : REVOKE R1 FROM U2 RESTRICT;

Exemple 3b :

L'instruction suivante réussit. Les instructions 3, 4 et 5 précédentes sont annulées.

U1 : REVOKE R1 FROM U2 CASCADE;

Exemple 3c :

L'instruction suivante échoue car, dans Instruction 3, l'utilisateur U2 a exercé ADMIN OPTION.

U1 : REVOKE ADMIN OPTION FOR R1 FROM U2 RESTRICT;

Exemple 3d :

L'instruction suivante réussit. Les instructions 4 et 5 sont annulées. U2 conserve les privilèges accordés par le rôle R1, mais nepeut accorder ce rôle à d'autres.

10 Blackfish SQL

117

10

Page 122: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

U1 : REVOKE ADMIN OPTION FOR R1 FROM U2 CASCADE;

Syntaxe d'échappement

Blackfish SQL prend en charge les séquences d'échappement pour ce qui suit :

• Littéraux date et heure

• OUTER JOIN

• Caractère d'échappement d'une clause LIKE

• Appel à des procédures stockées

Les échappements JDBC doivent toujours être entre accolades {}. Ils sont utilisés pour étendre les fonctionnalités de SQL.

Littéraux date et heure

{T 'hh:mm:ss'} Spécifie une heure qui doit être saisie dans l'ordre suivant : heures, suivies des minutes, suivies dessecondes.

{D 'aaaa-mm-jj} Spécifie une date, qui doit être saisie dans l'ordre suivant : année, mois, jour.

{TS 'aaaa-mm-jjhh:mm:ss'}

Spécifie une date/heure, qui doit être saisie dans le format : année, mois, jour, heures, minutes, secondes.

Exemples

INSERT INTO nomtable VALUES({D '2004-2-3'}, {T '2:55:11'});SELECT {T '10:24'} FROM nomtable;SELECT {D '2000-02-01'} FROM nomtable;SELECT {TS '2000-02-01 10:24:32'} FROM nomtable;

Jointures externes

{OJ <expression_table_jointure} Une jointure externe est exécutée sur l'expression de table spécifiée.

Exemple

SELECT * FROM {OJ a LEFT JOIN b USING(id)};

Caractère d'échappement pour LIKE

{ESCAPE <caractère>} Le caractère spécifié devient le caractère d'échappement dans la clause LIKE précédente.

Exemple

SELECT * FROM a WHERE name LIKE '%*%' {ESCAPE '*'}

Appel à des procédures stockées

{call <nom_procédure> (<liste_arguments>)}

Ou, si la procédure renvoie un paramètre résultant :

Blackfish SQL 10

118

10

Page 123: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

{? = call <nom_procédure> (<liste_arguments>)}

Exemple 1

La méthode implémentant IncreaseSalaries met à jour la table salaries avec un pourcentage d'augmentation accordé à tous lesemployés. Un objet de connexion est transmis implicitement à la méthode. Un updateCount de toutes les lignes affectées parIncreaseSalaries est renvoyé par Statement.executeUpdate.

{CALL IncreaseSalaries(10)};

Exemple 2

Le marqueur de paramètre indique l'emplacement du paramètre de sortie servant à récupérer le résultat de la procédurestockée.

{?=CALL ABS(-765)};

Fonctions d'échappement

Les fonctions sont écrites selon le format suivant, où FN indique que la fonction qui suit doit être exécutée :

{fn <nom_fonction>(<liste_arguments>) }

Fonctions numériques

Nom de la fonction La fonction renvoie

ABS(nombre) Valeur absolue de nombre

ACOS(flottant) Arc cosinus de flottant, en radians

ASIN(flottant) Arc sinus de flottant, en radians

ATAN(flottant) Arc tangente de flottant, en radians

ATAN2(flottant1, flottant2) Arc tangente, en radians, de flottant2 divisé par flottant1

CEILING(nombre) Plus petit entier >= nombre

COS(flottant) Cosinus de flottant radians

COT(flottant) Cotangente de flottant radians

DEGREES(nombre) Degrés pour nombre radians

EXP(flottant) Exponentielle de flottant

FLOOR(nombre) Plus grand entier <= nombre

LOG(flottant) Logarithme de base e de flottant

LOG10(flottant) Logarithme de base 10 de flottant

MOD(entier1, entier2) Reste de la division de entier1 par entier2

PI() Constante pi

POWER(nombre, puissance) nombre élevé à la puissance entière puissance

RADIANS(nombre) Radians pour nombre degrés

RAND(entier) Nombre à virgule flottante aléatoire généré pour le germe entier

ROUND(nombre, positions) nombre arrondi à positions positions

SIGN(nombre) –1 indique que le nombre est < 0 ; 0 indique que le nombre est = 0 ; 1 indique que lenombre est > 0

SIN(flottant) Sinus de flottant radians

10 Blackfish SQL

119

10

Page 124: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

SQRT(flottant) Racine carrée de flottant

TAN(flottant) Tangente de flottant radians

TRUNCATE(nombre, positions) nombre tronqué à positions positions

Fonctions chaîne

Nom de la fonction La fonction renvoie

ASCII(chaîne) Entier représentant le code ASCII du caractère le plus à gauche de chaîne

CHAR(code) Caractère correspondant au code ASCII code, où code est compris entre 0 et 255

CONCAT(chaîne1,chaîne2)

Chaîne de caractères formée en ajoutant chaîne2 à chaîne1 ; si une des chaînes est nulle, le résultatdépend du SGBD

DIFFERENCE(chaîne1,chaîne2)

Entier indiquant la différence entre les valeurs renvoyées par la fonction SOUNDEX pour chaîne1 etpour chaîne2

INSERT(chaîne1,début, longueur,chaîne2)

Chaîne de caractères formée en supprimant longueur caractères dans chaîne1 en commençant à laposition début, et en insérant chaîne2 dans chaîne1 à la position début

LCASE(chaîne) Convertit en minuscules tous les caractères majuscules de chaîne

LEFT(chaîne, n) Les n caractères les plus à gauche de chaîne.

LENGTH(chaîne) Nombre de caractères de chaîne, en excluant les espaces de fin

LOCATE(chaîne1,chaîne2[, début])

Position dans chaîne2 de la première occurrence de chaîne1, la recherche commençant au début dechaîne2 ; si début est spécifié, la recherche commence à la position début. Renvoie zéro si chaîne2ne contient pas chaîne1. La position 1 correspond au premier caractère de chaîne2.

LTRIM(chaîne) Caractères de chaîne après suppression des espaces de tête

REPEAT(chaîne, n) Chaîne de caractères formée en répétant n fois la chaîne chaîne

REPLACE(chaîne1,chaîne2, chaîne3)

Remplace toutes les occurrences de chaîne2 contenues dans chaîne1 par chaîne3

RIGHT(chaîne, n) Les n caractères les plus à droite de chaîne.

RTRIM(chaîne) Les caractères de chaîne après suppression des espaces de fin

SOUNDEX(chaîne) Chaîne de caractères dépendant de la source de données représentant le son des mots de lachaîne ; cela peut être un code SOUNDEX sur quatre positions ou une représentation phonétique dechaque mot.

SPACE(n) Chaîne de caractères constituée de n espaces.

SUBSTRING(chaîne,début, longueur)

Chaîne de caractères formée en extrayant longueur caractères de chaîne en commençant à laposition début

UCASE(chaîne) Convertit en majuscules tous les caractères minuscules de chaîne

Exemples

SELECT {FN LCASE('Hello')} FROM nomtable; SELECT {FN UCASE('Hello')} FROM nomtable; SELECT {FN LOCATE('xx', '1xx2')} FROM nomtable; SELECT {FN LTRIM('Hello')} FROM nomtable;

Blackfish SQL 10

120

10

Page 125: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

SELECT {FN RTRIM('Hello')} FROM nomtable; SELECT {FN SUBSTRING('Hello', 3, 2)} FROM nomtable; SELECT {FN CONCAT('Hello ', 'there.')} FROM nomtable;

Fonctions date et heure

Nom de la fonction La fonction renvoie

CURDATE() La date en cours sous forme d'une valeur date

CURTIME() L'heure locale en cours sous forme d'une valeur heure

DAYNAME(date) Une chaîne de caractères représentant le composant jour d'une date ; le nom de ce jour estspécifique à la source de données

DAYOFMONTH(date) Un entier compris entre 1 et 31 représentant le jour du mois de date

DAYOFWEEK(date) Un entier compris entre 1 et 7 représentant le jour de la semaine de date ; Dimanche = 1

DAYOFYEAR(date) Un entier compris entre 1 et 366 représentant le jour de l'année de date

HOUR(heure) Un entier compris entre 0 et 23 représentant le composant heure de heure

MINUTE(heure) Un entier compris entre 0 et 59 représentant le composant minute de heure

MONTH(date) Un entier compris entre 1 et 12 représentant le composant mois de date

MONTHNAME(date) Une chaîne de caractères représentant le composant mois de date ; le nom de ce mois estspécifique à la source de données

NOW() Une valeur d'estampille représentant la date et l'heure en cours

QUARTER(date) Un entier compris entre 1 et 4 représentant le trimestre de date; du 1er janvier au 31 mars = 1

SECOND(heure) Un entier compris entre 0 et 59 représentant le composant seconde de heure

TIMESTAMPADD(intervalle,n, estampille)

Une estampille calculée en ajoutant n intervalles à estampille ; intervalle peut prendre l'une desvaleurs suivantes : SQL_TSI_FRAC_SECOND, SQL_TSI_SECOND, SQL_TSI_MINUTE,SQL_TSI_HOUR, SQL_TSI_DAY, SQL_TSI_WEEK, SQL_TSI_MONTH, SQL_TSI_QUARTERou SQL_TSI_YEAR

TIMESTAMPDIFF(intervalle,estampille1, estampille2)

Un entier représentant le nombre d'intervalles dont estampille2 est supérieur à estampille1 ;intervalle peut prendre l'une des valeurs suivantes : SQL_TSI_FRAC_SECOND,SQL_TSI_SECOND, SQL_TSI_MINUTE, SQL_TSI_HOUR, SQL_TSI_DAY, SQL_TSI_WEEK,SQL_TSI_MONTH, SQL_TSI_QUARTER ou SQL_TSI_YEAR

WEEK(date) Un entier compris entre 1 et 53 représentant la semaine de l'année de date

YEAR(date) Un entier représentant le composant année de date

Exemples

SELECT {FN NOW()} FROM nomtable; SELECT {FN CURDATE() } FROM nomtable; SELECT {FN CURTIME() } FROM nomtable; SELECT {FN DAYOFMONTH(coldate) } FROM nomtable; SELECT {FN YEAR(coldate)} FROM nomtable;

10 Blackfish SQL

121

10

Page 126: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

SELECT {FN MONTH(coldate)} FROM nomtable; SELECT {FN HOUR(colheure) } FROM nomtable; SELECT {FN MINUTE(colheure) } FROM nomtable; SELECT {FN SECOND(colheure) } FROM nomtable;

Fonctions système

Nom de la fonction La fonction renvoie

DATABASE() Nom de la base de données

IFNULL(expression, valeur) valeur si expression est nul ; expression si expression n'est pas nul

USER() Nom de l'utilisateur dans le SGBD

Fonctions de conversion

Nom de la fonction

La fonction renvoie

CONVERT(valeur,typeSQL)

valeur convertie en typeSQL où typeSQL peut être un des types SQL suivants : BIGINT, BINARY, BIT,CHAR, DATE, DECIMAL, DOUBLE, FLOAT, INTEGER, LONGVARBINARY, LONGVARCHAR, REAL,SMALLINT, TIME, TIMESTAMP, TINYINT, VARBINARY ou VARCHAR

Exemple

SELECT {FN CONVERT('34.5',DECIMAL(4,2))} FROM nomtable;

ISQL

ISQL est un interpréteur de commandes SQL servant à exécuter les instructions SQL de manière interactive. Cette fonctionnalitén'est actuellement disponible qu'avec Blackfish SQL pour Java.

Obtenir de l'aide

Pour afficher l'aide de ISQL Blackfish SQL, émettez l'une des commandes d'aide suivantes : A partir de l'invite système :

• isql -? affiche les options de démarrage de ISQL.

• isql -help affiche les options de ISQL.

A partir de l'invite SQL :

• HELP CREATE affiche l'aide sur la création des sources de données. HELP SHOW affiche la liste des commandes SHOW accompagnée de brèves descriptions.

• HELP SET affiche la liste des commandes SET accompagnée de brèves descriptions.

Démarrage de ISQL

Pour démarrer ISQL Blackfish SQL, assurez-vous que <rép_install_BlackfishSQL>\bin appartient à votre cheminsystème, ou allez dans ce répertoire avant d'émettre la commande ISQL. Les options disponibles sont :

Blackfish SQL 10

122

10

Page 127: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Options du démarrage de ISQL

Option et arguments Description

-user nomUtilisateur Spécifie le nom d'utilisateur pour cette connexion

-password motdepasse Spécifie le mot de passe associé à nomUtilisateur

-role nomrôle Active le rôle spécifié pour l'utilisateur

-input nomfichier Exécute toutes les commandes contenues dans le fichier spécifié et quitte

-output nomfichier Redirige toutes les sorties vers le fichier spécifié

-datasource nomfichier Spécifie un autre fichier source de données

-echo Imprime toutes les commandes avant de les exécuter

-stacktrace Imprime le tracé de pile pour chaque erreur rencontrée

-pagelength n Imprime les entêtes de colonnes toutes les n lignes

-x Imprime toutes les instructions de définition des données à partir de la connexion en cours et quitte

-z Affiche les informations de version et quitte

Gestion des sources et des fichiers de données

Après le démarrage de ISQL, vous disposez des commandes suivantes pour gérer les connexions aux sources de données, lesfichiers et les sessions. Vous pouvez afficher la liste de ces commandes au cours des sessions ISQL en exécutant ce qui suit :

SHOW CREATE;

Il existe deux groupes de commandes supplémentaires traités plus loin dans ce chapitre : les commandes SHOW et lescommandes SET. Les commandes SQL disponibles pour la définition des données, la manipulation des données, la sécurité etla gestion des transactions sont discutées tout au long de ce chapitre.

Commandes ISQL de gestion des sources et des fichiers de données

Commande Description

CREATE DATASOURCEnomSourceDonnées [nomClasseSourceDonnées]propriétés

Associe une source de données et le nomSourceDonnées. Vous passez cenomSourceDonnées à CONNECT pour vous connecter à une base de données. Voir "Créationde sources de données avec ISQL" ci-après pour savoir comment créer des sources dedonnées dans ISQL.

CONNECTnomSourceDonnées[motdepasse]

Connecte la source de données spécifiée par nomSourceDonnées. Avant de pouvoir utiliserCONNECT, vous devez exécuter CREATE DATASOURCE pour associer une base de donnéesau nomSourceDonnées que vous transmettez à CONNECT. Vous n'avez pas à spécifier le nomd'utilisateur ni le mot de passe si ces éléments ont été spécifiés dans l'instruction CREATEDATASOURCE.

INPUT nomfichier Prend en entrée le contenu du fichier SQL spécifié.

OUTPUT nomfichier Ecrit la sortie dans le fichier spécifié.

OUTPUT Ecrit la sortie dans stdout.

EXPORT Exporte les instructions de définition des données et les données de la base en cours vers SQL.

EXPORT [motdepasse] Exporte les instructions de définition des données et les données de la base en cours vers lasource de données spécifiée. Pour exporter vers un fichier, utilisez EXPORT en conjonctionavec OUTPUT : OUTPUT sqlfichier.txt; EXPORT;

IMPORT [motdepasse] Importe les instructions de définition des données et les données depuis la source de donnéesspécifiée.

10 Blackfish SQL

123

10

Page 128: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

VERSION Affiche la version de ISQL et la version de toute base de données connectée.

EXIT Valide les modifications et quitte.

QUIT Annule les modifications et quitte.

Création de sources de données avec ISQL

Cette section fournit des détails sur la création des sources de données dans ISQL à l'aide de la commande CREATEDATASOURCE mentionnée ci-dessus. La syntaxe CREATE DATASOURCE est la suivante :

CREATE DATASOURCE nomSourceDonnées [nomClasseSourceDonnées] propriétés

Les arguments de la commande CREATE DATASOURCE sont :

nomSourceDonnées identifie la nouvelle source de données ; cela peut être n'importe quel identificateur SQL de votre choix.

nomClasseSourceDonnées est la classe spécifiant les propriétés nécessaires à la connexion à une base de données JDBC. Cedoit être une implémentation de l'interface standard JDBC, javax.sql.DataSource. Si cet argument n'est pas fourni,com.borland.javax.sql.JdbcDataSource est utilisé. Pour accéder aux bases de données InterBase, vous pouvez utiliserinterbase.interclient.DataSource.

propriétés peut inclure n'importe quelles propriétés de la classe fournie comme nomClasseSourceDonnées. Les propriétés sontséparées par des virgules et comprennent habituellement ce qui suit :

• user='nomutilisateur' Si vous ne spécifiez pas de nom d'utilisateur ici, vous pourrez le fournir comme partie de l'instruction CONNECT.

• password='motdepasse' Si vous ne spécifiez pas de mot de passe ici, vous pourrez le fournir comme partie de l'instruction CONNECT.

• databaseName='nom_basededonnées_à_connecter'

Exemple

Vous pouvez fournir des valeurs pour n'importe lesquelles des propriétés de la classe source de données. Par exemple, pourcréer une nouvelle base de données, ajoutez ce qui suit :

CREATE=true: CREATE DATASOURCE JDS user=SYSDBA, password=masterkey, databaseName='c:/databases/test.jds',CREATE=true';

Exemples

Les exemples suivants utilisent tous les deux la classe Blackfish SQL par défautcom.borland.javax.sql.JdbcDataSource, puisque aucun nom de classe n'est spécifié.

L'exemple ci-après crée une source de données locale, JDS_LOCAL :

CREATE DATASOURCE JDS_LOCAL  user=SYSDBA,  password=masterkey,  create=true,  databaseName='c:/test.jds';

L'exemple d'après crée une source de données distante, JDS_REMOTE. Il crée aussi la base de données test.jds.

CREATE DATASOURCE JDS_REMOTE  user=SYSDBA,  password=masterkey,  networkProtocol=tcp,  serverName=localhost,  portNumber=2508,  create=true,

Blackfish SQL 10

124

10

Page 129: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

  databaseName='c:/test.jds';

Commandes ISQL SHOW

Commande Description

SHOW DATASOURCE [nom] Affiche toutes les sources de données ou la source de données spécifiée.

SHOW DATABASE Affiche les paramètres de la base de données en cours.

SHOW VERSION Affiche la version de ISQL et la version de toute base de données connectée.

SHOW DDL Affiche les instructions de définition des données pour la base de données en cours.

SHOW SYSTEM Affiche les tables système.

SHOW TABLE [[schéma.]table] Affiche toutes les tables ou la table spécifiée.

SHOW VIEW [[schéma.]vue] Affiche toutes les vues ou la vue spécifiée.

SHOW PROCEDURE[[schéma.]nom]

Affiche toutes les procédures ou la procédure spécifiée.

SHOW FUNCTION[[schéma.]nom]

Affiche toutes les fonctions ou la fonction spécifiée.

SHOW INDEX [index [ON[schéma.]table]]

Affiche tous les index ou l'index spécifié.

SHOW ROLES Etablit la liste de tous les rôles définis dans la base de données.

SHOW USERS Etablit la liste de tous les utilisateurs définis dans la base de données.

SHOW GRANTTABLE [[schéma.]table]

Etablit la liste de tous les privilèges sur les tables ayant été accordés WITH GRANT OPTION.

SHOW GRANT VIEW[[schéma.]vue]

Etablit la liste de tous les privilèges sur les vues ayant été accordés WITH GRANT OPTION.

SHOW GRANT PROCEDURE   [[schéma.]nom]

Etablit la liste de tous les privilèges sur les procédures ayant été accordés WITH GRANTOPTION.

SHOW GRANT FUNCTION   [[schéma.]nom]

Etablit la liste de tous les privilèges sur les fonctions ayant été accordés WITH GRANTOPTION.

SHOW GRANT ROLE [rôle] Etablit la liste de tous les utilisateurs auxquels a été accordé le rôle spécifié.

SHOW GRANT DATABASE[utilisateur|rôle]

Etablit la liste de tous les privilèges sur la base ayant été accordés à l'utilisateur ou au rôlespécifié.

Commandes ISQL SET

Commande Description

SET Affiche les valeurs en cours pour ECHO, STACKTRACE et PAGELENGTH.

SET ECHO{ON|OFF}

Active ou désactive l'écho des commandes dans la sortie standard.

SETSTACKTRACE{ON|OFF}

Active ou désactive l'affichage des tracés d'erreurs.

10 Blackfish SQL

125

10

Page 130: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

SETPAGELENGTHnombre

Définit la longueur de la page en lignes ; la valeur par défaut est 0, ce qui signifie que les entêtes decolonnes ne s'imprime qu'une fois.

Voir aussi

Préface ( see page 1)

Présentation ( see page 3)

Architecture du système ( see page 7)

Etablissement des connexions ( see page 25)

Administration de Blackfish SQL ( see page 33)

Utilisation de la sécurité de Blackfish SQL ( see page 37)

Utilisation des procédures stockées et des fonctions définies par l'utilisateur ( see page 43)

Utilisation des déclencheurs dans les tables Blackfish SQL ( see page 57)

Référence des procédures stockées ( see page 61)

Optimisation des applications Blackfish SQL ( see page 127)

Déploiement des applications de bases de données Blackfish SQL ( see page 135)

Dépannage ( see page 139)

Blackfish SQL 10

126

10

Page 131: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

11 Optimisation des applications Blackfish SQL

Cette section présente les méthodes qui permettent d'améliorer les performances, la fiabilité et la taille des applications BlackfishSQL. A moins que ce ne soit spécifié autrement, DataStoreConnection fait référence à une classe DataStoreConnectionou à un objet DataStore utilisé pour ouvrir une connexion dans un fichier Blackfish SQL.

• Chargement rapide des bases de données

• Recommandations générales

• Optimisation des applications transactionnelles

• Allègement des ressources déployées pour les applications Blackfish SQL pour Java

• Colonnes à incrémentation automatique

• Composants compagnons de Blackfish SQL

• Utilisation de modules de données pour composants DataExpress

Chargement rapide des bases de données

Voici quelques astuces pour améliorer les performances de votre application au chargement des bases de données :

• Utilisez des instructions ou des commandes préparées chaque fois que c'est possible. Si le nombre de paramètres change d'une insertion à l'autre, effacez les paramètres avant de définir les nouveaux.

• Créez la table sans clés primaires, ni clés étrangères, ni index secondaires. Chargez la table, puis créez les clés primaires, clés étrangères et index secondaires dont vous avez besoin.

Optimisation du chargement des bases de données spécifique à Java

Utilisez la classe DataExpress TextDataFile pour importer des fichiers texte. Son analyseur est rapide et elle peut charger lesdonnées rapidement. Vous devez définir le store StorageDataSet par une DataStoreConnection et la propriétéStoreName par le nom de votre table dans la base de données Blackfish SQL. Lorsque vous chargez une nouvelle base dedonnées :

1. Créez d'abord la base de données non transactionnelle.

2. Pendant que la base de données est non transactionnelle, utilisez un composant DataExpress StorageDataSet.addRow

11 Blackfish SQL

127

11

Page 132: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

ou TextDataFile pour charger la base de données.

3. Une fois que la base de données est chargée, utilisez la propriété DataStore.TxManager pour la rendre transactionnelle.

Cette technique permet de charger la base de données deux ou trois fois plus rapidement.

Recommandations générales

Cette section propose quelques conseils pour améliorer les performances des applications Blackfish SQL.

Fermeture correcte de la base de données

Si une base de données n'est pas fermée correctement, il y aura un délai la prochaine fois qu'un processus l'ouvrira. Cela est dûau fait que Blackfish SQL a besoin de 8 à 10 secondes pour vérifier qu'aucun autre processus n'a ouvert la base de données.Pour vérifier qu'une base de données a été correctement fermée, assurez-vous que toutes les connexions devenues inutilessont fermées. S'il est difficile de vérifier que toutes les connexions sont fermées, utilisez une connexion avec les droits del'administrateur pour appeler la procédure stockées intégrée DB_ADMIN.CLOSE_OTHER_CONNECTIONS qui vérifie que toutesles autres connexions sont fermées.

La fermeture de toutes les connexions présente un autre avantage, en libérant la mémoire allouée au cache du Blackfish SQL.

Actuellement, les bases de données non transactionnelles peuvent être accédées par SQL uniquement si la propriété de lectureseule de la base de données est définie par true. Mais, les JavaBeans DataExpress peuvent effectuer des opérations d'écrituresur une base de données non transactionnelle.

La fermeture d'une base de données Blackfish SQL assure que toutes les modifications sont enregistrées sur disque. Un threaddémon pour toutes les instances DataStoreConnection ouvertes enregistre constamment les données modifiées en mémoirecache. (Par défaut les données modifiées sont enregistrées toutes les 500 millisecondes). Si vous quittez la machine virtuelleJava directement, sans fermer la base de données, le thread démon n'a pas la possibilité d'enregistrer le dernier ensemble demodifications. Cela présente un petit risque de détérioration d'une base de données Blackfish SQL si elle n'est pastransactionnelle.

Une base de données Blackfish SQL transactionnelle ne peut pas perdre de données, mais le gestionnaire de transactionsannule toutes les modifications non validées.

Fermeture des bases de données spécifique à Java

Si votre application utilise des composants JavaBean DataExpress, fermez tous les StorageDataSet dont la propriété storeest définie par une DataStoreConnection lorsque vous avez fini de les utiliser. Cela libère les ressources Blackfish SQLassociées au StorageDataSet et lui permet d'éliminer ses données périmées.

Vous pouvez utiliser la méthode DataStore.shutdown() pour vérifier si toutes les connexions à une base de données ont étécorrectement fermées.

Optimisation du cache disque de Blackfish SQL

La taille maximale par défaut du cache pour une base de données Blackfish SQL est de 512 blocs. La taille par défaut d'un blocest de 4096 octets. La mémoire cache atteint donc une capacité maximale d'environ 2 Mo (512*4096). Notez que cette mémoireest allouée selon les besoins. Dans quelques rares situations, lorsque tous les blocs sont utilisés, le cache peut dépasser lalimite des 512 blocs. Vous pouvez utiliser la propriété DataStore.MinCacheSize pour spécifier la taille minimale du cache.

REMARQUE : Ne modifiez pas sans raison la taille du cache de la base de données. Vérifiez au préalable qu'agir ainsiaugmentera bien les performances de votre application.

Avant de modifier la taille du cache Blackfish SQL, réfléchissez aux points suivants :

• Les caches OS modernes ont généralement de hautes performances. Dans de nombreux cas, augmenter la taille du cache Blackfish SQL n'améliore pas significativement les performances mais utilise plus de mémoire.

• Il n'existe qu'un seul cache disque Blackfish SQL pour toutes les bases de données Blackfish SQL ouvertes dans le même processus. Lorsque toutes les bases de données Blackfish SQL sont arrêtées, la mémoire du cache disque global est libérée.

Blackfish SQL 11

128

11

Page 133: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

• Pour les périphériques portables avec de faibles quantités de mémoire, définissez la propriété DataStore.MinCacheSize par une valeur plus petite, par exemple 96.

Optimisation de l'accès aux fichiers

Les bases de données Blackfish SQL exécutent la majorité des opérations de lecture/écriture avec les quatre types de fichierssuivants :

• Le fichier de la base de données Blackfish SQL elle-même (l'extension de ce fichier est .jds) tel que spécifié par la propriété DataStore.FileName

• Les fichiers historiques transactionnels Blackfish SQL (l'extension de ces fichiers est LOGAnnnnnnnnnn, où n est un chiffre) tels que spécifiés par la propriété TxManager.ALogDir

• Les fichiers temporaires utilisés par les grandes opérations de tri, tels que spécifiés par la propriété DataStore.TempDirName

• Les fichiers temporaires .jds utilisés pour les résultats des requêtes SQL, tels que spécifiés par la propriété DataStore.TempDirName

Vous pouvez améliorer les performances en commandant à Blackfish SQL de placer les fichiers mentionnés précédemment surdifférentes unités de disque.

Stockage des fichiers

Voici quelques conseils de gestion du stockage des fichiers qui peuvent améliorer les performances de vos applications :

• Il est particulièrement important de placer les fichiers historiques sur une unité de disque séparée. Notez que les fichiers historiques sont généralement ajoutés dans un ordre séquentiel et que leur contenu doit subir une écriture forcée sur disque pour les validations (commit). Par conséquent, il est avantageux de disposer d'une unité de disque pouvant accomplir rapidement des opérations d'écriture.

• Sur les plates-formes Win32, les performances peuvent être améliorées si vous placez les fichiers historiques de Blackfish SQL dans un répertoire distinct. Le stockage de nombreux fichiers autres que les fichiers historiques dans le répertoire des fichiers historiques peut ralentir les performances des opérations de validation. Ce conseil peut être suivi pour des plates-formes autres que Windows NT/2000/XP.

• N'oubliez pas de défragmenter régulièrement les systèmes de fichiers de vos unités de disque. Cette pratique est surtout importante pour l'unité de disque stockant les fichiers historiques, car Blackfish SQL effectue sur ce fichier un grand nombre d'opérations séquentielles de lecture/écriture.

• Sur les plates-formes Win32, envisagez d'utiliser un système de fichiers FAT32 et une taille de cluster assez confortable, 64 Ko par exemple, pour le disque sur lequel sont écrits les fichiers historiques.

Options d'écriture dans le cache disque d'une base de données non transactionnelle

Remarque : Cette section s'applique uniquement à Blackfish SQL pour Java, qui utilise les composants JavaBean DataExpress.

Utilisez la propriété saveMode du composant DataStore pour contrôler la fréquence d'écriture sur disque des blocs du cache.Cette propriété ne s'applique qu'aux bases de données Blackfish SQL non transactionnelles. Voici les valeurs correctes de laméthode :

 0  Laisser le thread démon gérer toutes les écritures de cache. Cette valeur offre les meilleures performances mais aussi leplus grand risque de corruption.

 1  Enregistrer immédiatement lorsque les blocs sont ajoutés ou supprimés ; laisser le thread démon gérer toutes les autresmodifications. Il s'agit du mode par défaut. Les performances sont presque aussi bonnes qu'avec saveMode(0).

 2  Enregistrer immédiatement toutes les modifications. Utiliser cette valeur chaque fois que vous déboguez une applicationutilisant un composant DataStore.

11 Blackfish SQL

129

11

Page 134: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

A l'inverse des autres propriétés de DataStore, saveMode peut être modifiée quand la connexion est ouverte. Si vous utilisezpar exemple une DataStoreConnection, vous pouvez accéder à la valeur via la propriété dataStore :

DataStoreConnection store = new DataStoreConnection();...store.getDataStore().setSaveMode(2);

Notez que cela modifie le comportement de tous les objets DataStoreConnection accédant à ce fichier de base de donnéesBlackfish SQL particulier.

Réglage de la mémoire

Vous pouvez régler l'utilisation de la mémoire d'un certain nombre de manières. Sachez que demander trop de mémoire peuts'avérer aussi mauvais que d'en avoir trop peu.

• Vous pouvez essayer d'augmenter la propriété ConnectionProperties.MinCacheBlocks, qui contrôle le nombre minimal de blocs mis en mémoire cache.

• La propriété ConnectionProperties.MaxSortBuffer contrôle la taille maximale du tampon mémoire utilisé pour les tris en mémoire. Les tris dépassant cette taille de tampon mémoire utilisent un algorithme de tri plus lent basé sur le disque.

Réglage de la mémoire spécifique à Java

Le tas Java a tendance à résister à croître au-delà de sa taille initiale, en forçant une élimination fréquente des donnéespérimées avec toujours une petite taille de tas libre. Utilisez l'option JVM -Xms pour spécifier une plus grande taille de tasinitiale. Il y a souvent un avantage certain à donner la même valeur aux paramètres JVM -Xms et -Xmx.

Autres astuces pour améliorer les performances

Voici quelques conseils pour améliorer les performances :

• Définir la propriété ConnectionProperties.TempDirName, utilisée par le moteur de requête, par un répertoire se trouvant sur une autre unité de disque (rapide) peut aider.

• Essayez de changer la fréquence du point de vérification pour le gestionnaire de transactions. Augmenter la valeur de cette propriété peut améliorer les performances mais aussi ralentir les récupérations après panne. Cela peut être fait par SQL, à l'aide de la procédure stockée intégrée DB_ADMIN.ALTER_DATABASE. Dans Blackfish SQL pour Java, vous pouvez utiliser JdsExplorer pour définir cette propriété en choisissant TxManager > Modifier.

Optimisation des applications transactionnelles

Le gain en fiabilité et en flexibilité apporté par l'utilisation de bases de données Blackfish SQL transactionnelles se fait audétriment de certaines performances. Vous pouvez réduire cet inconvénient de différentes manières, comme décrit dans lessections suivantes.

Utilisation des transactions en lecture seule

Pour les transactions effectuant des lectures et non des écritures, les améliorations de performance significatives peuvent êtreréalisées en utilisant une transaction en lecture seule. La propriété readOnly de connexion contrôle si une transaction setrouve en lecture seule. Le JavaBean DataStoreConnection de Blackfish SQL pour Java dispose d'une propriétéreadOnlyTx pour permettre les transactions en lecture seule.

Les transactions en lecture seule fonctionnent en simulant une capture de la base de données Blackfish SQL. Cette capture nevoit que les données des transactions validées au moment où la transaction de lecture seule commence. Cette capture, créée àl'ouverture de DataStoreConnection, est actualisée à chaque appel d'une méthode commit.

Les transactions en lecture seule présentent un autre avantage, celui de ne pas être bloquées par des écritures ou par d'autreslectures. La lecture et l'écriture requièrent généralement toutes les deux un verrouillage. Mais comme une transaction en lectureseule utilise une capture, elle n'a pas besoin de verrouillage.

Vous pouvez optimiser davantage l'application en spécifiant une valeur pour la propriété readOnlyTxDelay. La propriété

Blackfish SQL 11

130

11

Page 135: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

readOnlyTxDelay spécifie l'ancienneté maximale (en millisecondes) d'une capture existante que la connexion puissepartager. Lorsque la propriété n'a pas la valeur zéro, les captures existantes sont recherchées (de la plus récente à la plusancienne). Si l'ancienneté de l'une d'elles est inférieure à readOnlyTxDelay, elle est utilisée et une nouvelle capture n'est pasréalisée. Par défaut, cette propriété a une valeur de 5000 millisecondes.

Utilisation du mode validation logicielle

Si vous activez le mode validation logicielle dans la propriété SoftCommit, le gestionnaire de transactions continue àenregistrer un historique des transactions validées mais il n'utilise pas de mécanisme d'écriture synchrone pour les validations.Lorsque la validation logicielle est activée, le cache du système d'exploitation peut mettre dans le tampon les écritures defichiers des transactions validées. Généralement, le système d'exploitation finit en quelques secondes l'écriture sur disque desblocs brouillés. La validation logicielle améliore les performances mais ne garantit pas la durabilité des dernières transactionsvalidées. Vous pouvez définir la propriété SoftCommit en appelant la procédure stockée intégréeDB_ADMIN.ALTER_DATABASE.

Désactivation de l'historique des états pour les fichiers historiques de transactions

Une désactivation de l'historique des messages d'état peut aussi améliorer les performances. Pour cela, initialisez à false lapropriété RecordStatus. Vous pouvez définir la propriété RecordStatus en appelant la procédure stockée intégréeDB_ADMIN.ALTER_DATABASE.

Réglage des performances du contrôle des accès simultanés avec Blackfish SQL

Voici quelques conseils pour optimiser les performances des opérations de contrôle des accès simultanés avec Blackfish SQL :

• Choisissez le niveau d'isolation le plus bas sous lequel votre application puisse fonctionner. Les faibles isolations posent les verrous les moins nombreux et les moins puissants.

• Regroupez les instructions multiples dans une seule transaction. Les connexions passent par défaut en mode validation automatique après l'exécution de chaque instruction.

• Validez les transactions aussi tôt que possible. La majorité des verrous ne sont libérés qu'au moment où la transaction est validée (commit) ou annulée (rollback).

• Réutilisez les objets instruction ou commande chaque fois que c'est possible, ou encore mieux, utilisez des instructions ou des commandes préparées quand c'est possible.

• Fermez toutes les instructions ou commandes, tous les ensembles de résultats ou lectures, et tous les objets connexion lorsqu'ils ne sont plus utilisés. Notez que les objets ensemble de résultat ou lecture uni-directionnels sont automatiquement fermés lors de la lecture de la dernière ligne.

• Utilisez des transactions en lecture seule pour les états dont l'exécution dure longtemps ou pour les opérations de sauvegarde en ligne. Utilisez la méthode DB_ADMIN.COPYDATABASE pour les sauvegardes en ligne. La lecture seule fournit une vue cohérente (sérialisable), du point de vue des transactions, des tables utilisées. Les transactions ne posant pas de verrou, aucun dépassement du délai de libération d'un verrou ni verrouillage mortel ne peut se produire. Voir la section Utilisation des transactions en lecture seule.

• La maintenance d'une vue en lecture seule a un coût en temps système. En conséquence, plusieurs transactions peuvent partager la même vue en lecture seule. La propriété ConnectionProperties.ReadOnlyTxDelay spécifie l'ancienneté maximale de la vue en lecture seule au moment où démarre la transaction en lecture seule permettant de l'utiliser. La validation d'une transaction pour une connexion en lecture seule actualise sa vue de la base de données. Notez qu'une transaction en lecture seule utilise les fichiers historiques transactionnels pour maintenir les vues. En conséquence, les connexions en lecture seule doivent être fermées dès qu'elles ne sont plus nécessaires.

Utilisation du traitement multithread

La capacité de traitement des transactions en écriture peut augmenter avec le nombre de threads utilisés pour effectuer lesopérations car chaque thread peut diviser le temps système des opérations de validation via le support de la "validation degroupe" apporté par Blackfish SQL.

11 Blackfish SQL

131

11

Page 136: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Allègement des ressources déployées pour les applications Blackfish SQL pour Java

Lors du déploiement d'une application Blackfish SQL, certaines classes et certains fichiers graphiques peuvent être exclus car ilsne sont pas utilisés.

• Si Blackfish SQL est utilisé sans employer le pilote JDBC, excluez les classes suivantes :

• com.borland.datastore.Sql*.class

• com.borland.datastore.jdbc.*

• com.borland.datastore.q2.*

• Si vous utilisez DataExpress et qu'une instance de DataStore ou de DataStoreConnection est définie dans la propriété StorageDataSet.store, excluez les classes suivantes :

• com.borland.dx.memorystore.*

• Si StorageDataSet est utilisé mais ni QueryDataSet, ni QueryProvider, ni StoredProcedureDataSet ni StoredProcedureProvider, excluez les classes suivantes :

• com.borland.dx.sql.*

• Si DataExpress n'utilise pas de composant visuel à partir des bibliothèques JBCL ou dbSwing, excluez les classes suivantes :

• com.borland.dx.text.*

• Si com.borland.dx.dataset.TextDataFile n'est pas utilisé, excluez les classes suivantes :

• com.borland.jb.io.*

• com.borland.dx.dataset.TextDataFile.class

• com.borland.dx.dataset.SchemaFile.class

Colonnes à incrémentation automatique

Vous pouvez spécifier des colonnes de type int et long comme ayant des valeurs AutoIncrement.

Les caractéristiques suivantes s'appliquent à toutes les valeurs des colonnes AutoIncrement :

• Elles sont toujours uniques

• Elles ne peuvent jamais avoir la valeur Null

• Les valeurs des lignes supprimées ne peuvent jamais être réutilisées

Grâce à ces caractéristiques, les colonnes AutoIncrement sont idéales pour constituer des clés primaires à une seule colonneinteger/long.

Une colonne AutoIncrement constituant l'identificateur interne d'une ligne, elle fournit l'accès aléatoire le plus rapide à uneligne particulière d'une table Blackfish SQL.

Chaque table ne peut avoir qu'une colonne AutoIncrement.  L'utilisation d'une colonne AutoIncrement économise dansvotre table la place d'une colonne d'entiers et d'une colonne d'index secondaires si vous l'utilisez en remplacement d'une cléprimaire. L'optimiseur de requêtes de Blackfish SQL optimise les requêtes faisant référence à une colonne AutoIncrementdans une clause WHERE. Pour avoir des instructions sur l'utilisation des colonnes AutoIncrement avec SQL, reportez-vous à"Utilisation des colonnes incrémentées automatiquement avec SQL" dans Référence SQL.

Colonnes à incrémentation automatique utilisant des JavaBeans DataExpress avec Blackfish SQL pour Java

Si vous utilisez DataExpress, pour créer une table avec une colonne AutoIncrement, donnez à la propriétéColumn.AutoIncrement la valeur true avant d'ouvrir la table. Si vous modifiez une table existante, vous devrez appeler laméthode StorageDataSet.restructure().

Composants compagnons de Blackfish SQL

La bibliothèque des composants dbSwing propose deux composants (sur la page des dbSwing supplémentaires de la palettedes composants) facilitant la production d'applications Blackfish SQL solides.

Blackfish SQL 11

132

11

Page 137: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

• DBDisposeMonitor dispose automatiquement des ressources des composants orientés données lorsqu'un conteneur est fermé. Elle comprend une propriété closeDataStores. Si sa valeur est true (valeur par défaut), elle ferme automatiquement toutes les bases de données Blackfish SQL liées aux composants nettoyés. Si vous mettez, par exemple, un DBDisposeMonitor dans un JFrame contenant des composants dbSwing liés à une base de données Blackfish SQL, quand vous fermez ce JFrame, DBDisposeMonitor ferme automatiquement la base de données Blackfish SQL. Ce composant est particulièrement utile pendant la construction d'applications simples à expérimenter avec Blackfish SQL.

• DBExceptionHandler comprend un bouton Quitter. Il peut être caché via une valeur de propriété, mais il est visible par défaut. Un clic sur ce bouton ferme automatiquement tous les fichiers de base de données Blackfish SQL trouvés ouverts. DBExceptionHandler représente la boîte de dialogue par défaut affichée par les composants dbSwing quand une exception survient.

Utilisation des modules de données avec Blackfish SQL pour Java pour des composants JavaBeans DataExpress

Lors de l'utilisation d'une table Blackfish SQL avec un StorageDataSet, il est vraiment recommandé qu'ils soient tousregroupés à l'intérieur de modules de données. Effectuez toutes les références à ces StorageDataSet via les méthodesd'accès DataModule telles que businessModule.getCustomer. La raison en est que beaucoup de fonctionnalités exposéesvia les StorageDataSet le sont par les paramètres de propriété et d'événement.

Bien que la plupart des propriétés structurelles importantes du StorageDataSet persistent dans la table Blackfish SQLelle-même, ce n'est pas le cas des classes qui implémentent les interfaces écouteur d'événement. L'instanciation duStorageDataSet avec tous les paramètres, contraintes, champs calculés et filtres (implémentés avec les événements) del'écouteur d'événement, assure il soit correctement maintenu à l'exécution comme à la conception.

Voir aussi

Préface ( see page 1)

Présentation ( see page 3)

Architecture du système ( see page 7)

Etablissement des connexions ( see page 25)

Administration de Blackfish SQL ( see page 33)

Utilisation de la sécurité de Blackfish SQL ( see page 37)

Utilisation des procédures stockées et des fonctions définies par l'utilisateur ( see page 43)

Utilisation des déclencheurs dans les tables Blackfish SQL ( see page 57)

Référence des procédures stockées ( see page 61)

Référence SQL ( see page 77)

Déploiement des applications de bases de données Blackfish SQL ( see page 135)

Dépannage ( see page 139)

11 Blackfish SQL

133

11

Page 138: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier
Page 139: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

12 Déploiement des applications de bases de données Blackfish SQL

Quand vous avez terminé de développer votre application, l'étape suivante consiste à la déployer. Le déploiement implique uneattention particulière aux problèmes de licence et vous devez déterminer quels sont les fichiers Blackfish SQL nécessaires à ladistribution. Ce chapitre traite des fichiers de distribution de Blackfish SQL. Pour obtenir des informations sur la gestion deslicences de déploiement, veuillez contacter le Support clients.

• Déploiement d'applications Blackfish SQL pour Windows

• Déploiement d'applications Blackfish SQL pour Java

Déploiement d'applications Blackfish SQL pour Windows

Les fichiers spécifiques que vous devez déployer dépendent du type de l'application écrite. Le tableau ci-dessous fournitquelques directives pour déterminer quels fichiers distribuer.

Fichiers pour le déploiement d'applications Blackfish SQL pour Windows

Nom de fichier Description

DbxClientDriver100.bplDbxCommonDriver100.bplDbxReadOnlyMetaData100.bpl

Pilote dbExpress distant pour les applications Win32 qui utilisent des packages.Si vous n'utilisez pas de package, le pilote est lié dans le fichier exe del'application.

Borland.Data.DbxClientDriver.dllBorland.Data.DbxCommonDriver.dllBorland.Data.DbxReadOnlyMetaData.dll

Pilote dbExpress distant pour les applications .NET qui utilisent desassemblages. Si vous n'utilisez pas d'assemblage, le pilote est lié dans le fichierexe de l'application.

Borland.Data.BlackfishSQL.LocalClient.dll Assemblage .NET contenant le fournisseur ADO.NET local et le noyau de labase de données lui-même. C'est le seul fichier requis pour les applications quiutilisent uniquement le fournisseur ADO.NET local.

Borland.Data.BlackfishSQL.RemoteClient.dll Assemblage .NET contenant le fournisseur ADO.NET distant.

BSQLServer.exe BSQLServer.exe.config Lanceurs requis pour démarrer le serveur sur la ligne de commande ou en tantque service Windows. Vous devez déployer égalementBorland.Data.BlackfishSQL.LocalClient.dll avec ces fichiers.

12 Blackfish SQL

135

12

Page 140: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Licences de déploiement de Blackfish SQL pour Windows

Blackfish SQL pour Windows recherche les fichiers d'activation de licence SLIP dans les emplacement suivants :

• La propriété système blackfishsql.licenseDirectory

Définissez cette propriété en appelant la méthode System.AppDomain.CurrentDomain.SetData ou en spécifiant unevaleur pour cette propriété dans le fichier BSQLServer.exe.config.

• Le répertoire du serveur si vous utilisez un pilote distant

• Le répertoire du fichier .exe de l'application qui utilise un pilote local

• L'emplacement GAC de l'assemblage, si le pilote local est en utilisation et a été ajouté au GAC

• Le sous-répertoire CodeGear du dossier System.Environment.SpecialFolder.CommonApplicationData

• $(BDSCOMMONDIR)\license

La variable d'environnement BDSCOMMONDIR est définie quand BDS est installé.

Déploiement d'applications Blackfish SQL pour Java

Blackfish SQL inclut un certain nombre de fichiers jar différents. Les fichiers spécifiques que vous devez déployer dépendent dutype de l'application écrite. Le tableau ci-dessous fournit quelques directives pour déterminer quels fichiers distribuer.

Fichiers JAR pour le déploiement d'applications Blackfish SQL pour Java

Nom de fichier Description

dx.jar Connectivité à la base de données DataExpress locale

jds.jar Connectivité à la base de données JDBC locale

jdsremote.jar Connectivité à une base de données client léger JDBC distante

jdsserver.jar Exécution complète du serveur de bases de données intégré pour connectivité auxbases de données JDBC locales et distantes

jdshelp.jar beandt.jar dbtools.jarjdsserver.jar

Requis pour les interfaces utilisateur graphiques de JdsServer et de JdsExplorer

beandt.jar Requis pour la compilation et la conception visuelle de composants JavaBean

dbswing.jar Requis pour les interfaces utilisateur Swing

jbcl-awt.jar Requis pour les interfaces utilisateur AWT

<BlackfishSQL_home>/bin/JdsServerWindows : JdsServer.exe

Lanceur de l'interface graphique du serveur Blackfish SQL

JdsServer.config Fichier de configuration pour le lanceur de JdsServer

<BlackfishSQL_home>/bin/JdsExplorerWindows : JdsExplorer.exe

Lanceur de l'interface graphique de JdsExplorer

JdsExplorer.config Fichier de configuration pour le lanceur de JdsExplorer

<BlackfishSQL_home>/doc/* Aide Blackfish SQL, accessible directement ou par JdsExplorer et JdsServer

Licences de déploiement de Blackfish SQL pour Java

Blackfish SQL pour Java recherche les fichiers d'activation de licence SLIP dans les emplacement suivants :

• La propriété système blackfishsql.licenseDirectory

Vous pouvez définir cette propriété en appelant la méthode java.lang.System.setProperty. Spécifiez cette propriété avecl'option -D sur la ligne de commande de la JVM (machine virtuelle Java) :

Blackfish SQL 12

136

12

Page 141: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

-DblackfishSQL.licenseDirectory=/mylicenseDir

Vous pouvez également définir cette propriété dans le fichier JdsServer.config en ajoutant une instruction vmparam -D :

vmparam -DblackfishSQL.licenseDirectory=/mylicenseDir

• La propriété système user.home de Java

• Tous les répertoires spécifiés dans la définition du classpath Java

Voir aussi

Préface ( see page 1)

Présentation ( see page 3)

Architecture du système ( see page 7)

Etablissement des connexions ( see page 25)

Administration de Blackfish SQL ( see page 33)

Utilisation de la sécurité de Blackfish SQL ( see page 37)

Utilisation des procédures stockées et des fonctions définies par l'utilisateur ( see page 43)

Utilisation des déclencheurs dans les tables Blackfish SQL ( see page 57)

Référence des procédures stockées ( see page 61)

Référence SQL ( see page 77)

Optimisation des applications Blackfish SQL ( see page 127)

Dépannage ( see page 139)

12 Blackfish SQL

137

12

Page 142: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier
Page 143: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

13 Dépannage

Ce chapitre donne quelques indications pour le dépannage et la résolution des erreurs ou des problèmes qui risquent de seproduire au cours de la création, de la maintenance ou de l'accès aux bases de données Blackfish SQL.

• Noms de fichiers des bases de données avec chemins d'accès relatifs

• Activation de l'historique système de Blackfish SQL

• Activation de l'historique des bases de données Blackfish SQL

• Débogage des dépassements du délai d'attente de la libération d'un verrou et des verrous mortels

• Vérification de l'intégrité d'une base de données Blackfish SQL

• Dépannage de Blackfish SQL pour Java

Noms de fichiers des bases de données avec chemins d'accès relatifs

Vous pouvez utiliser la macro DataDirectory dans la spécification des noms de fichiers des bases de données, pour fournir lesupport des chemins d'accès relatifs. Pour de plus amples informations sur la macro DataDirectory, voir Etablissement desconnexions. Si vous n'utilisez pas la macro DataDirectory, les chemins d'accès sont relatifs par rapport au répertoire en cours duprocessus dans lequel Blackfish SQL s'exécute. Sur les plates-formes Java, la propriété user.dir décide de la façon dont sontrésolus les noms de fichiers de bases de données lorsqu'aucun chemin d'accès complet n'est spécifié. La machine virtuelle Java(JVM) donne comme valeur par défaut à cette propriété le répertoire de travail en cours d'utilisation par le processus. Vouspouvez définir cette propriété par une option sur la ligne de commande de la JVM. Par exemple :

-Duser.dir=/monapplication

Vous pouvez également définir cette propriété depuis une application Java, avec la méthodejava.util.System.setProperty.

Activation de l'historique système de Blackfish SQL

L'historique système est effectué pour toutes les connexions et toutes les bases de données accédées au cours du mêmeprocessus.

Vous pouvez activer l'historique système de Blackfish SQL à l'aide des moyens suivants.

Pour le client Blackfish SQL local :

Définissez la propriété système blackfishsql.logFile par le nom du fichier dans lequel l'historique doit être écrit. Si vous ladéfinissez par con, l'historique s'affiche sur la console. Vous pouvez spécifier les types d'opérations à inclure dans le fichierhistorique en définissant la propriété blackfishsql.logFilters.

13 Blackfish SQL

139

13

Page 144: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Pour le client Blackfish SQL distant :

Dans le fichier de configuration de Blackfish SQL définissez la propriété blackfishsql.logFile par le nom du fichier danslequel l'historique doit être écrit. Si vous la définissez par con, l'historique s'affiche sur la console. Vous pouvez spécifier lestypes d'opérations à inclure dans le fichier historique en définissant la propriété blackfishsql.logFilters.

Définition des propriétés système

Toutes les propriétés système Blackfish SQL distinguent les minuscules des majuscules et commencent par le préfixeblackfishsql.. La classe SystemProperties possède des chaînes constantes pour toutes les propriétés système. Pourles propriétés système Windows :

Si votre application utilise le serveur Blackfish SQL, définissez les propriétés système dans le fichierBSQLServer.exe.config. Si votre application n'utilise pas le serveur Blackfish SQL, définissez les propriétés système enappelant la méthode System.AppDomain.CurrentDomain.SetData.

Pour les propriétés système Java :

Si votre application utilise le serveur Blackfish SQL, définissez les propriétés système dans le fichier BSQLServer.config enpréfixant la définition de la propriété par vmparam -D. Si votre application n'utilise pas le serveur Blackfish SQL, définissez lespropriétés système en appelant la méthode System.setProperty.

Options d'historique JDBC de Blackfish SQL pour Java

Pour Blackfish SQL pour Java, il y a des options d'historique supplémentaires :

• Si vous utilisez une implémentation javax.sql.DataSource, appeler la méthode setLogWriter de l'implémentation DataSource. Voir com.borland.javax.sql.JdbcDataSource et com.borland.javax.sql.JdbcConnectionPool.

• Appeler la méthode java.sql.DriverManager.setLogStream.

• Appeler la méthode java.sql.DriverManager.setLogWriter.

Activation de l'historique des bases de données Blackfish SQL

La sortie de l'historique des bases de données se fait base de données par base de données et est envoyée aux fichiershistoriques des états de chaque base de données. La durée de vie des fichiers historiques des états est gérée de la même façonque pour les fichiers historiques des transactions de la base de données. Quand un fichier historique des transactions estsupprimé, le fichier historique des états est également supprimé. Quand vous créez une base de données, l'historique des étatsest désactivé par défaut. Vous pouvez activer l'historique des états en appelant la procédure stockée intégréeDB_ADMIN.ALTER_DATABASE. Vous pouvez définir les options de filtrage de l'historique pour toutes les connexions à une basede données, en appelant la procédure stockée intégrée DB_ADMIN.SET_DATABASE_STATUS_LOG_FILTER. Vous pouvezdéfinir les options de filtrage de l'historique pour une seule connexion, en définissant la propriété de connexion logFilter ouen appelant la procédure stockée intégrée DB_ADMIN.SET_STATUS_LOG_FILTER.

Débogage des dépassements du délai d'attente de la libération d'un verrou et des verrous mortels

Le verrouillage peut échouer parce que le délai d'attente de la libération d'un verrou ou d'un verrou mortel a été dépassé. Cesdépassements de délai se produisent lorsqu'une connexion attend un verrou détenu par une autre transaction et que cetteattente excède le nombre de milli-secondes défini par la propriété lockWaitTime. Dans de tels cas, une exception estdéclenchée ; elle identifie la connexion qui subit le dépassement du délai d'attente et celle qui maintient effectivement le verroudemandé. La transaction qui subit le dépassement du délai d'attente n'est pas annulée (rollback).

Blackfish SQL dispose d'un système de détection de tous les verrous mortels, automatique et ultra-rapide. Une exceptionappropriée est déclenchée ; elle identifie la connexion qui a rencontré le verrou mortel et celle qui est bloquée. Au contraire desexceptions pour dépassement de délai, les exceptions déclenchées lorsqu'un verrou mortel a été rencontré par unejava.sql.Connection font que cette connexion annule automatiquement sa transaction. Ce comportement permet auxautres connexions de continuer leur travail.

Blackfish SQL 13

140

13

Page 145: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Utilisez les règles suivantes pour détecter les situations de dépassement de délai et de verrou mortel :

• Lisez le message d'exception du dépassement de délai ou du verrou mortel. Le message indique les tables et les connexions impliquées.

• Activez l'historique système ou des bases de données. Pour que l'historique ne consigne que les messages relatifs aux verrous, définissez les options de filtrage de l'historique par LOCK_ERRORS.

• Utilisez la procédure stockée intégrée DB_ADMIN.GET_LOCKS pour consigner les verrous détenus par toutes les connexions.

Comment éviter blocages et verrous mortels

Une connexion requiert généralement un verrou lorsqu'elle lit ou écrit dans un flux ou une ligne d'une table. Elle peut êtrebloquée par une autre connexion déjà en cours d'écriture ou de lecture. Vous pouvez empêcher les blocages de deux manières :

• Réduire la durée d'écriture des transactions.

• Utiliser des transactions en lecture seule, puisqu'elles ne requièrent pas de verrouillage pour la lecture.

Utilisation des transactions dont la durée d'écriture est courte

Dans des environnements très chargés, les connexions doivent privilégier les transactions de courte durée. Cependant, dansdes environnements peu chargés, une transaction de longue durée assure un meilleur rendement, les demandes de validationétant moins nombreuses. La validation prend un pourcentage non négligeable du temps système car elle doit garantir ladurabilité d'une transaction.

Utilisation des transactions en lecture seule

Les transactions en lecture seule ne sont pas bloquées par des écritures ou d'autres lectures, et comme elles n'acquièrent pasde verrous, elles ne bloquent jamais les autres transactions.

Définir la propriété de connexion readOnlyTx par true force une connexion à utiliser des connexions en lecture seule.Remarquez qu'il existe également une propriété de connexion readOnly, qui est très différente de la propriété de connexionreadOnlyTx. La propriété de connexion readOnly force le fichier base de données à s'ouvrir en mode lecture seule, ce quiempêche les autres connexions d'écrire dans la base de données.

Pour les connexions JDBC de Blackfish SQL pour Java vous pouvez également activer des transactions en lecture seule endéfinissant la propriété readOnly de l'objet java.sql.Connection ou des méthodescom.borland.dx.sql.dataset.Database.getJdbcConnection par true. Lors de l'utilisation d'objetsDataStoreConnection de Blackfish SQL pour Java, donnez la valeur true à la propriété readOnlyTx avant l'ouverture de laconnexion.

Les transactions en lecture seule fonctionnent en simulant une capture de la base de données Blackfish SQL. Seules lesdonnées des transactions validées au point où a démarré la transaction de lecture seule apparaissent dans la capture ; sinon, laconnexion devrait vérifier s'il existe des modifications en suspens et les annuler chaque fois qu'elle accède aux données. Unecapture commence à l'ouverture de la connexion. La capture est actualisée chaque fois que sa méthode commit est appelée.

Vérification de l'intégrité d'une base de données Blackfish SQL

Si vous pensez que le contenu du cache n'a pas été correctement enregistré dans une base de données Blackfish SQL nontransactionnelle, vous pouvez vérifier l'intégrité du fichier en appelant la procédure stockée intégrée DB_ADMIN.VERIFY.

Notez que les bases de données Blackfish SQL transactionnelles ont une fonction de récupération automatique en cas deproblème lorsqu'elles sont ouvertes. Dans des circonstances normales, les bases de données Blackfish SQL ne nécessitent pasde vérification.

13 Blackfish SQL

141

13

Page 146: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Dépannage de Blackfish SQL pour Java

Cette section fournit des indications de dépannage spécifiques à Java.

Débogage des déclencheurs et procédures stockées

La méthode de débogage des déclencheurs et des procédures stockées dépend du pilote JDBC utilisé par l'application, local oudistant.

Si votre application utilise le pilote JDBC local, il n'y a rien de spécial à configurer, puisque le moteur de base de donnéess'exécute dans le même processus que l'application.

Si votre application utilise le pilote JDBC distant, vous pouvez recourir à l'une des procédures suivantes :

Utilisation du JavaBean DataStoreServer pour le débogage :

Dans votre application, instanciez un composant JavaBean com.borland.datastore.jdbc.DataStoreServer etexécutez sa méthode start.

Utilisation de JdsServer pour le débogage :

Effectuez les étapes suivantes :

1. Ajoutez les lignes suivantes à votre fichier <jds_home>/bin/JdsServer.config : vmparam -Xdebug vmparam -Xnoagent vmparam -Djava.compiler=NONE vmparam -Xrunjdwp:transport=dt_socket,server=y,address=5000,suspend=y

2. Exécutez JdsServer. Le serveur n'apparaît qu'après le lancement d'un débogueur distant (comme celui de JBuilder) qui se connecte au processus JdsServer sur le port 5000.

Accès à des tables créées avec SQL et des JavaBeans DataExpress

La création d'une tables SQL force la mise en majuscules des identificateurs non mis entre apostrophes. Vous devez mettre lesidentificateurs entre apostrophes pour activer la distinction minuscules/majuscules. Voir "Identificateurs" dans Référence SQL.

Lorsque vous utilisez des composants DataExpress pour créer une table, les noms de la table et de ses colonnes distinguent lesminuscules des majuscules. Si vous spécifiez ces identificateurs en minuscules, ou par un mélange de minuscules et demajuscules, SQL ne peut y accéder que s'ils sont entre apostrophes.

Si vous utilisez DataExpress pour accéder à une table, la propriété storeName de StorageDataSet distingue les minusculesdes majuscules. Cependant, les identificateurs de colonnes peuvent être référencés sans distinction minuscules/majuscules. Enconséquence, pour DataExpress, vous pouvez accéder à une colonne address en utilisant ADDRESS ou address.

Le plus simple, pour éviter tout problème de reconnaissance de composants SQL et DataExpress, est de taper leur identificateuren majuscules lorsque votre application crée des tables ou y accède.

Débogage des bases de données non transactionnelles

La propriété saveMode doit être initialisée à 2 lors du débogage d'une application utilisant une base de données Blackfish SQLnon transactionnelle. Le débogueur arrête tous les threads lorsque vous effectuez un pas à pas simple dans le code ou lorsquedes points d'arrêt sont rencontrés. Si vous ne définissez pas la propriété saveMode par 2, le thread démon de Blackfish SQL nepeut pas enregistrer les données modifiées du cache. Pour de plus amples informations, voir "Options d'écriture dans le cachedisque d'une base de données non transactionnelle" dans Optimisation des applications Blackfish SQL.

Résolution des problèmes de localisation et de tri des données

Sun Microsystems modifie les classes java.text.CollationKey de temps en temps, au fur et à mesure qu'il corrige lesproblèmes. Les index secondaires des tables stockées dans une base de données Blackfish SQL utilisent ces classesCollationKey pour générer des clés de tri lorsque les paramètres régionaux ne sont pas ceux des Etats-Unis. Lorsque Sun

Blackfish SQL 13

142

13

Page 147: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

change le format de ces CollationKeys, les index secondaires créés par un ancien JDK Sun risquent ne pas fonctionnercorrectement avec un nouveau JDK Sun. Les problèmes provenant d'une telle situation se manifestent sous les formessuivantes :

• Parfois, les localisations et les requêtes ne trouvent pas les enregistrements qu'elles devraient trouver.

• Une table visualisée dans l'ordre de l'index secondaire (par le paramétrage de la propriété StorageDataSet.sort) peut ne pas être triée correctement.

Actuellement, la seule manière d'y remédier est d'abandonner les index secondaires et de les recréer avec le JDK en cours. Laméthode StorageDataSet.restructure() abandonne aussi tous les index secondaires.

Voir aussi

Préface ( see page 1)

Présentation ( see page 3)

Architecture du système ( see page 7)

Etablissement des connexions ( see page 25)

Administration de Blackfish SQL ( see page 33)

Utilisation de la sécurité de Blackfish SQL ( see page 37)

Utilisation des procédures stockées et des fonctions définies par l'utilisateur ( see page 43)

Utilisation des déclencheurs dans les tables Blackfish SQL ( see page 57)

Référence des procédures stockées ( see page 61)

Référence SQL ( see page 77)

Optimisation des applications Blackfish SQL ( see page 127)

Déploiement des applications de bases de données Blackfish SQL ( see page 135)

13 Blackfish SQL

143

13

Page 148: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier
Page 149: Blackfish SQL - Embarcadero Websitedocs.embarcadero.com/products/rad_studio/delphiAndcpp... · 2008-09-19 · Blackfish SQL est le nom du produit, de ses outils et du format de fichier

Index

AAdministration de Blackfish SQL 33

Architecture du système 7

DDB_ADMIN 61

DB_UTIL 61

Dépannage 139

Déploiement des applications de bases de données Blackfish SQL 135

EEtablissement des connexions 25

OOptimisation des applications Blackfish SQL 127

PPréface 1

Présentation 3

RRéférence des procédures stockées 61

Référence SQL 77

UUtilisation de la sécurité de Blackfish SQL 37

Utilisation des déclencheurs dans les tables Blackfish SQL 57

Utilisation des procédures stockées et des fonctions définies par l'utilisateur 43

14 Blackfish SQL

a