| ||
auteur : Benjamin GAGNEUX | ||
Il faut utiliser le mot clé FIRST :
Remplacez X par le nombre voulu.
| ||
lien : ![]() |
| ||
auteur : Benjamin GAGNEUX | ||
Il faut utiliser les mots clés FIRST et SKIP :
Remplacez X et Y par les nombres voulus.
| ||
lien : ![]() |
| ||
auteur : Benjamin GAGNEUX | ||
Pour cela il est nécessaire de lancer une requête sur les tables systèmes de notre base de données.
|
| ||||
auteur : SergioMaster | ||||
Il y a deux variables disponibles , CURRENT_DATE qui retourne la date courante et CURRENT_TIMESTAMP qui retourne la date et l'heure. Vous pouvez les utiliser dans les instructions SQL:
pour interroger , utilisez ceci
Vous devez faire un SELECT .. FROM quelque chose et RDB$DATABASE est la table singleton présente dans toutes les bases de données Firebird (FAQ #30). Vous pouvez aussi utiliser ces variables en PSQL (langage des procédures stockées et triggers)
Notez bien que CURRENT_TIMESTAMP retourne la date et heure du début de la transaction, ce qui veut dire qu'elles sont constantes durant toute celle-ci. Si vous avez besoin de la date et/ou l'heure exacte à chaque moment utilisez la valeur spéciale 'now' .
Comme vous pouvez le voir , la même règle s'applique avec CURRENT_DATE, et la valeur spéciale 'today', pour obtenir la date courante. La raison derrière ceci est l'atomicité d'une transaction, donc CURRENT_DATE et CURRENT_TIMESTAMP doivent fournir une certaine cohérence. Spécialement pour des systèmes tournant 24H/24 7J/7 il peut très bien arriver que la date change entre le début et la fin de la transaction. Traduction réalisée depuis http://www.firebirdfaq.org/faq114/ |
| |||
auteur : SergioMaster | |||
Quelquefois vous voulez juste savoir combien d'enregistrements fournira une requête, sans pour autant les récupérer. Avec Firebird 2 et les tables dérivées c'est facile :
par exemple:
dans les anciennes versions (1.x) de Firebird (1.x) vous devrez soit écrire la requête pour obtenir le nombre d'enregistrement, ou créer une vue puis faire un SELECT COUNT(*) sur celle-ci . Par exemple :
Traduction réalisée depuis http://www.firebirdfaq.org/faq198/ |
| ||
auteur : SergioMaster | ||
Vous pouvez vouloir ajouter un index UNIQUE sur le champ d'une table (par exemple le champ ID) mais vous avez besoin pour cela de trouver et détruire les enregistrements en double avant. Voici une requête pour les trouver :
Traduction réalisée depuis http://www.firebirdfaq.org/faq149/ | ||
lien : ![]() |
| ||
auteur : SergioMaster | ||
Vous pouvez utiliser la 'clé secrète' RDB$DB_KEY de Firebird. RDB$DB_KEY est un champ 'caché' qui identifie chaque ligne dans une instruction SQL. Par exemple, si vous avez une table TABLE1 sans clé primaire, avec les colonnes COL1 et COL2 qui sont les mêmes , vous pourrez effacer les lignes 'extras' ainsi :
Vous pouvez contrôler quel enregistrement est considéré comme duplicata en incluant les colonnes appropriées de la table dans la clause WHERE (dans la plupart des cas vous voudrez toutes les mettre) Traduction réalisée depuis http://www.firebirdfaq.org/faq301/ |
| ||
auteur : SergioMaster | ||
Il y a plusieurs manières de faire, par exemple, ceci fonctionne :
Ceci ajoutera seulement de caractère (LF) line feed sur Linux, retour Chariot (CR) sur Mac , et CRLF sur Windows. Si vous voulez un comportement unique quelle que soit la plateforme utilisez la fonction ASCII_CHAR de la bibliothèque standard IB_UDF :
Si vous ne voulez pas utiliser les UDFs, vous pouvez toujours mettre ces caractères dans une table et les sélectionner à partir de celle-ci. Traduction réalisée depuis http://www.firebirdfaq.org/faq132/ |
| |||
auteur : SergioMaster | |||
Supposons que vous ayez une requête d'agrégat simple , sur la base exemple employee , qui fournit le nombre d'employés pour chaque projet :
Si vous avez besoin de plus d'informations sur le projet lui-même , vous écrirez quelque chose de ce type :
Quand vous avez un grand nombre de colonnes impliquées la liste du GROUP BY peut devenir très longue. A un certain stade , elle atteindra la limite de taille pour une clé de tri (voir FAQ #00236) soit : 64kB. Pour éviter ceci, vous pouvez utilisez MIN ou MAX pour de telles colonnes (puisque de toutes façons elles retournent des valeurs uniques):
Traduction réalisée depuis http://www.firebirdfaq.org/faq304/ |
| ||
auteur : SergioMaster | ||
Une conversion directe n'est pas possible sans utiliser une UDF, mais vous pouvez extraire du texte en utilisant la fonction SUBSTRING .
Prenez bien note que la taille maximum d'une VARCHAR est de 32767 (ce qui peut être moins selon le type de caractères utilisé, par exemple l'UTF8). Plusieurs sous-couches d'accès aux bases de données permettent de récupérer les données BLOB en chaine, et ce directement. Par exemple, en PHP vous pouvez utiliser:
qui convertit automatiquement tout BLOB texte en VARCHAR, ce qui évite la nécessité d'écrire du code PHP spécifique. Traduction réalisée depuis http://www.firebirdfaq.org/faq250/ |
| ||
auteur : SergioMaster | ||
Réponse courte : Non , pas besoin. Réponse longue : Firebird vous permet des identifiants en majuscules, minuscules ou les deux car il ignore la casse (case insensitive).
sont des instructions identiques. Firebird stockes les identifiants sans préserver la casse utilisée (lire plus bas), ainsi si vous utilisez un outil d'administration qui extrait ses informations des tables systèmes , vous obtiendrez tous les noms en majuscules. Si vous voulez vraiment utiliser des minuscules (et non seulement des majuscules) vous devrez mettre des doubles apostrophes pour chaque identifiant. Attention, une fois fait, vous devrez tout le temps le faire.
sont trois instructions différentes. Quand vous utilisez les guillemets, Firebird stocke le nom tel qu'il a été écrit . Vous pouvez aussi utiliser les guillemets pour stocker des caractères autrement illégaux tels que point, virgule, double point , point d'interrogation et caractères nationaux (non ASCII), ou un mot clé SQL réservé (par exemple pour avoir une colonne nommée User ou Date ). Certains utilisateurs préfèrent ne pas compliquer les choses et n'utilisent aucune apostrophe , d'autres adorent avoir une casse mélangée et ne sont pas gênés par les doubles apostrophes. La plupart des outils d'administration (FlameRobin inclus) ont une option de configuration pour répondre a vos besoins : apostrophes seulement si besoin , ou apostrophes tout le temps. Traduction réalisée depuis http://www.firebirdfaq.org/faq76/ |
| ||
auteur : SergioMaster | ||
Si vous essayez d'écrire une expression telle que char + char ou varchar + varchar, ou si vous essayez d'ajouter une valeur chaine à une autre , vous obtiendrez un message d'erreur comme celui-ci : expression evaluation not supported La raison, le + n'est pas l'opérateur de concaténation de chaine en SQL standard , c'est ||.
Notez que, si une des colonnes est nulle, le résultat sera NULL. Pourquoi? Eh bien parce que, NULL veux dire que la valeur est inconnue , ce qui fait que si vous mettez ensemble une valeur connue et une inconnue vous ne pouvez pas savoir ce que vous allez obtenir comme résultat. C'est pourquoi le résultat est aussi inconnu soit : NULL. Pour contourner ce problème, utilisez la fonction COALESCE. Prenez également en compte que, contrairement à certains autres systèmes de bases de données, Firebird suit les normes SQL, et que NULL n'est pas la même chose qu'une chaîne vide ''. Traduction réalisée depuis http://www.firebirdfaq.org/faq21/ |
| ||
auteur : SergioMaster | ||
Vous pouvez avoir un problème de ce genre :
Le SELECT ci-dessus ne retournera rien. La raison en est que les colonnes de type CHAR sont toujours remplies à droite avec des espaces à concurrence de la longueur définie, donc la colonne contient 'abcd ', avec un espace à la fin. Jetez un oeil à la FAQ #00237 pour plus de détails. Pour contourner ceci vous utiliserez un VARCHAR, ou retaillerez la colonne en utilisant les fonctions TRIM ou RTRIM
RTRIM fait partie de la bibliothèque IB_UDF. Si vous ne l'avez pas déclaré référez-vous à la FAQ #00169 pour apprendre à l'activer. Traduction réalisée depuis http://www.firebirdfaq.org/faq309/ |
| ||
auteur : SergioMaster | ||
C'est ainsi conceptualisé. CURRENT_TIMESTAMP fournit la même valeur pour tout un ensemble d'instructions. Cela veut dire que CURRENT_TIMESTAMP aura la même valeur à l'intérieur d'un ensemble, et également durant l'exécution d'une procédure stockée et des différentes procédures pouvant être appelées par celle-ci . Si vous voulez obtenir la 'vraie' heure plutôt que l'heure de l'exécution utilisez 'now' qui est une valeur spéciale.
'now' étant une chaîne , elle est évaluée (convertie en horodate) à chaque exécution. Traduction réalisée depuis http://www.firebirdfaq.org/faq56/ |
| ||
auteur : SergioMaster | ||
Vous pouvez transformer le résultat dans le set de caractères OCTETS. C'est utilisé pour mettre en clair des données binaires et la plupart des clients (ISQL, FlameRobin, etc.) l'affichera en hexadécimal. Exemple:
Affichera
Traduction réalisée depuis http://www.firebirdfaq.org/faq339/
|
| ||
auteur : SergioMaster | ||
Oui. Vous aurez besoin d'utiliser une double paire de parenthèses. Exemple:
Prenez bien note que les expressions COMPUTED BY qui se réfèrent à d'autres tables n'auront pas de bonnes performances car un nouveau SELECT est exécuté pour chaque ligne. Il est bien mieux de créer une vue, une procédure stockée - ou d'utiliser un EXECUTE BLOCK si vous voulez le faire en une seule fois. Traduction réalisée depuis http://www.firebirdfaq.org/faq289/ |
| ||||
auteur : SergioMaster | ||||
La manière la plus courante en SQL est la suivante:
Avec Firebird 2, vous pouvez utiliser un EXECUTE BLOCK pour écrire une expression plus efficace :
Avec Firebird 1.x, vous pourrez écrire une procédure pour faire le travail. Outre le SQL direct, vous pouvez utiliser des outils tels que FBExport qui vous permettra une meilleure manipulation des erreurs (il sera plus facile de trouver la ligne exacte ainsi que la colonne qui empêche la mise à jour). Voici un exemple avec FBExport, premièrement exporter les données vers un fichier:
Ensuite les importer dans une autre table :
FBExport est un outil open source. Le téléchargement de la dernière version est ici Traduction réalisée depuis http://www.firebirdfaq.org/faq323/ |
| ||
auteur : SergioMaster | ||
Vous pourriez avoir une procédure stockée qui fait quelque chose avec une table, mais dont le nom de cette table ne soit connu qu'à l'exécution. Vous pouvez faire cela avec un EXECUTE STATEMENT. Par exemple , nous voulons fournir le nom de la table dont nous voulons extraire le champ ID :
Vous pouvez faire pareil avec des vues ou des procédures. La seule chose qui ne peut être variable c'est le nombre et nom des paramètres de sortie . Traduction réalisée depuis http://www.firebirdfaq.org/faq322/ |
| ||
auteur : SergioMaster | ||
Parfois vous devez fournir une requête SQL à un outil tiers ou à un composant, en souhaitant qu'elle renvoie le numéro de chaque ligne. Bien que cela soit facilement faisable via une variable temporaire dans une procédure stockée ou en utilisant un EXECUTE BLOCK, vous pouvez souhaiter cette numérotation au titre d'un simple SELECT . Les variables de contexte de Firebird peuvent faire le travail pour vous . Voici une manière de faire proposée par Fabiano Bonin. Cet exemple montre toutes les tables et vues de la base de données : Exemple pour les bases de données en Dialect 3 :
Exemple pour les bases de données en Dialect 1 :
l'exemple pour le Dialect 1 est une contribution de Serge Girard du site developpez.net. Traduction réalisée depuis http://www.firebirdfaq.org/faq343/ |
| ||
auteur : SergioMaster | ||
La plus importante est que CHAR est rempli avec des espaces à droite alors que VARCHAR ne l'est pas. Par exemple, avec ceci :
La colonne v1 contiendra la valeur 'a', tandis que la colonne c2 contiendra 'a ' avec les espaces additionnels. Les espaces de fin seront ignorés lors des comparaisons, ce qui fait que les deux clauses WHERE suivantes fonctionneront :
Les espaces de fin, par contre, sont respectés par l'opérateur LIKE, ce qui peut être source de confusion chez le débutant. Traduction réalisée depuis http://www.firebirdfaq.org/faq237/ | ||
lien : ![]() |
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.