mon but est d'écrire un proc stocké qui peut rassembler toutes les valeurs de champ de plusieurs rangées dans une seule variable de sortie (peut-être varchar (some_length)). Cela peut sembler une solution étrange mais je suis assez positif c'est le seul que je peux utiliser dans cette situation. Je n'ai jamais utilisé Firebird auparavant et les procs stockés ont l'air très différents des autres systèmes DB connus. Mon Firebird est 1.5 et le dialecte 3 (je ne sais pas ce que cela signifie). Alors peut-être que quelqu'un pourrait m'aider avec un exemple d'algorithme.Firebird a stocké la procédure pour concaténer toutes les valeurs de champ de plusieurs rangées
Répondre
La procédure suivante fait ce que vous décrivez:
SET TERM !!;
CREATE PROCEDURE concat_names
RETURNS (concat VARCHAR(2000))
AS
DECLARE VARIABLE name VARCHAR(100);
BEGIN
concat = '';
FOR SELECT first_name || ' ' || last_name FROM employee INTO :name
DO BEGIN
concat = concat || name || ', ';
END
END!!
SET TERM ;!!
EXECUTE PROCEDURE concat_names;
Mais je doute la sagesse de cette solution. Comment savez-vous que VARCHAR est assez long pour toutes les lignes de votre jeu de données?
Il est beaucoup plus facile et plus sûr d'exécuter une requête pour renvoyer le résultat à une application ligne par ligne. Chaque langage de programmation d'application a des méthodes pour concaténer les chaînes, mais plus important encore, ils ont des méthodes plus flexibles pour gérer la croissance des données. Par ailleurs, "dialecte" dans Firebird et InterBase fait référence à un mode de compatibilité qui a été introduit afin que les applications développées pour InterBase 5.x puissent fonctionner avec les versions ultérieures d'InterBase et Firebird. C'était il y a presque dix ans, et autant que je sache, il n'y a pas besoin aujourd'hui d'utiliser quoi que ce soit plus bas que le dialecte 3.
Vous devez tester les valeurs NULL lorsque concaténer, voici un exemple pour deux champs et un séparateur entre eux:
CREATE PROCEDURE CONCAT(
F1 VARCHAR(385),
F2 VARCHAR(385),
SEPARATOR VARCHAR(10))
RETURNS (
RESULT VARCHAR(780))
AS
begin
if ((:f1 is not null) and (:f1 <> '')) then
result = :f1;
if ((:f2 is not null) and (:f2 <> '')) then
if ((result is not null) and (result <> '')) then
begin
if ((:separator is not null) and (separator <> '')) then
result = result||separator||f2;
else
result = result||f2;
end
else
result = f2;
suspend;
end
Le retour de plusieurs lignes à l'aide de procédures stockées Firebird est très simple.
Ne pas utiliser:
execute procedure proc_name(value);
Utilisez plutôt le:
select * from proc_name(value);
- 1. Comment concaténer les valeurs de MySQL SELECT
- 2. Comment modifier confortablement les types de champ ou la longueur de champ dans Firebird?
- 3. Comment puis-je renvoyer toutes les valeurs d'une procédure stockée?
- 4. Concaténer les valeurs de colonne à partir des lignes
- 5. C - Concaténer toutes les têtes d'une chaîne
- 6. suivre toutes les versions de la procédure stockée qui est modifiée plusieurs fois
- 7. Valeur de retour de jeu stocké Procédure pas
- 8. Concat toutes les valeurs de colonne en sql
- 9. Quelle est la meilleure façon de stocker les valeurs de configuration pour plusieurs dizaines de colonnes?
- 10. Processus stocké ayant des valeurs de sortie
- 11. Les valeurs de plusieurs tables sur une ligne
- 12. MySQL - Tous les rangées correspondant à toutes les lignes de table jointe
- 13. Obtenir toutes les valeurs d'énumération
- 14. Obtenir toutes les valeurs de NSDictionary (profondément)
- 15. jQuery - comment sélectionner toutes les lignes de table entre deux rangées de table en même table
- 16. Trouver toutes les tables avec un champ contenant des valeurs de chaîne xml
- 17. obtenir toutes les valeurs de ul dans la variable
- 18. Comment concaténer plusieurs lignes en une dans Oracle sans créer de procédure stockée?
- 19. stocker plusieurs valeurs en tant que binaire dans un champ
- 20. Stockage de plusieurs valeurs dans les cookies
- 21. plusieurs valeurs de sélection erreur
- 22. concaténer récursive a des fonctions javascript arguments
- 23. Comment concaténer un champ de résultat de sous-requête dans la requête parente?
- 24. Conversion de toutes les valeurs $ _POST en entiers lorsqu'un formulaire HTML a été envoyé?
- 25. Pas récupérer les toutes les valeurs choisies dans la case
- 26. Utilisation de la procédure stockée pour remplir la zone de liste déroulante à l'aide d'Entity Framework
- 27. Quelles sont toutes les valeurs possibles pour SQLException.getSQLState?
- 28. Codage de la procédure stockée pour l'écran de recherche avec plusieurs critères optionnels
- 29. Installation personnalisée de Firebird
- 30. WPF Toolkit Datagrid - Afficher les rangées de détails
Si vous utilisez Firebird 2.1, vous pouvez utiliser la fonction LIST globale avec fournit blob textuelle en conséquence. C'est à dire. aucune limite de champ varchar. –
Si je me souviens, vous ne pouvez pas déclarer un paramètre de procédure ou une valeur de retour avec un type de données BLOB ou ARRAY. –
Toute valeur nulle pourrait briser cette solution. – Nelson