Je voudrais créer une variable de tableau en mémoire qui peut être utilisée dans mon code PL / SQL. Je ne trouve aucune collection dans Oracle PL / SQL qui utilise de la mémoire pure, elles semblent toutes être associées à des tables. Je cherche à faire quelque chose comme ça dans mon PL / SQL (syntaxe C #):
string[] arrayvalues = new string[3] {"Matt", "Joanne", "Robert"};
Modifier: Oracle: 9i
Réponses:
Vous pouvez utiliser VARRAY pour un tableau de taille fixe:
Ou TABLE pour un tableau illimité:
Le mot «table» ici n'a rien à voir avec les tables de base de données, ce qui prête à confusion. Les deux méthodes créent des tableaux en mémoire.
Avec l'un ou l'autre de ces éléments, vous devez à la fois initialiser et étendre la collection avant d'ajouter des éléments:
Le premier indice est 1 et non 0.
la source
my_array(0) := 'some string';
array.extend();
ajoute-t-il un slot à un tableau borné normal? Dans ce cas, sa taille est déjà dynamique, donc une table (tableau illimité) ne serait pas nécessaire.varray(3)
4 fois - vous obtenez une erreur "indice hors limite".array.extend()
. Partout où je regardais, cela ne montrait pas cela et c'était la partie la plus importante pour pouvoir ajouter plus d'un élément (d'après ma compréhension, encore nouveau dans les tableaux en SQL).Vous pouvez simplement déclarer un DBMS_SQL.VARCHAR2_TABLE pour contenir un tableau de longueur variable en mémoire indexé par un BINARY_INTEGER:
Vous pouvez utiliser un tableau associatif (anciennement appelé tables PL / SQL) car il s'agit d'un tableau en mémoire.
Le tableau associatif peut contenir n'importe quelle composition de types d'enregistrement.
J'espère que ça aide, Ollie.
la source
VALUE_ERROR
lorsque la collection est vide. Je suggérerais plutôt d'utiliserFOR i IN 1 .. employee_array.COUNT
dans ce cassys.odcivarchar2list
ci-dessous a l'avantage, que vous avez également un constructeur à portée de main, par exemple pour l'initialisation par défaut des paramètres de fonction:sys.odcivarchar2list('val1','val2')
Une autre solution consiste à utiliser une collection Oracle comme Hashmap:
la source
Vous pouvez également utiliser un
oracle defined collection
J'utiliserais un tableau en mémoire. Mais avec l'
.COUNT
amélioration suggérée par l'Ouzibérie:Une autre solution serait d'utiliser un Hashmap comme @Jchomel l'a fait ici .
NB:
Avec Oracle 12c, vous pouvez même interroger directement des tableaux dès maintenant !
la source
Exemples de programmes comme suit et fournis sur le lien également https://oracle-concepts-learning.blogspot.com/
table plsql ou tableau associé.
la source