2017-06-14 7 views
0

Je tente de créer un type de table dont le type de colonne est ARRAY dans SAP Hana. Lorsque j'utilise le DDL standard pour créer le type de table, à savoirCréation d'un type de table de stockage de colonne dans Hana

CREATE TYPE MYSCHEMA.TABNAME AS TABLE("ObjList" INTEGER ARRAY); 

Je reçois l'erreur suivante:

Could not execute 'CREATE TYPE "schema"."ListType" AS TABLE ("ID" BIGINT  CS_FIXED, ...' 
SAP DBTech JDBC: [7]: feature not supported: cannot create row table having array type: ObjList 

On ne sait pas à partir de la documentation comment créer un type de table de type magasin de colonne. Puisque je passe la valeur ARRAY du code .NET à la procédure stockée dans HANA pour la mise à jour en vrac/upsert, je ne peux pas faire disparaître cette exigence.

TIA

Répondre

1

Il n'y a aucun moyen de créer des types de table de colonne - types de table sont toujours une structure de ligne car ils définissent la façon dont devraient ressembler les dossiers. Les types ne stockent pas de données, donc il n'y a pas de distinction entre ligne/colonne/quoi que ce soit ici. Pour ce que vous voulez faire - en passant des ARRARYES d'une application cliente à SAP HANA - cette différence n'a pas d'importance puisque ce n'est tout simplement pas possible. Vous pouvez passer des tableaux entre des procédures/fonctions et des tables, mais aucune interface externe ne peut y insérer des données. Seule la fonction ARRAY() vous permet de créer des tableaux sur le serveur. Si vous recherchez « tableau hana » ici, vous verrez que cela a été discuté assez longuement déjà ...

Insert array in HANA with JAVA, Upload an array in HANA ou How to insert an array in a loop to the database à la liste quelques exemples.

+0

Merci Lars! Je pense à utiliser une table de colonnes temporaire globale au lieu d'un type de table pour gérer ce qui précède. Mon doute est que puisque j'utilise la méthode de l'API client d'ado.net 'WriteToServer()', je transmettrais une datable au serveur. Puis-je définir mon type de source en tant que chaîne et le construire comme ARRAY () et l'envoyer en utilisant 'WriteToServer()', puisque je peux tirer parti de la fonctionnalité d'insertion par lots qui serait plus efficace. –

+0

J'ai essayé de transmettre une datatable comme mentionné ci-dessus dans 'WriteToServer()' méthode, qui a entraîné l'exception suivante: 'SELECT tableau sur la table temporaire avec GROUPBY, WHERE, ORDERBY n'est pas supporté» Je suis cluless quant à ce qui s'est mal passé. il en raison du fait que la colonne source de datatable a une chaîne en tant que type de données? –