Me gustaría crear una variable de matriz en memoria que pueda usarse en mi código PL / SQL. No puedo encontrar ninguna colección en Oracle PL / SQL que use memoria pura, todas parecen estar asociadas con tablas. Estoy buscando hacer algo como esto en mi PL / SQL (sintaxis C #):
string[] arrayvalues = new string[3] {"Matt", "Joanne", "Robert"};
Editar: Oracle: 9i
Respuestas:
Puede usar VARRAY para una matriz de tamaño fijo:
O TABLE para una matriz ilimitada:
La palabra "tabla" aquí no tiene nada que ver con las tablas de la base de datos, de manera confusa. Ambos métodos crean arreglos en memoria.
Con cualquiera de estos debe inicializar y extender la colección antes de agregar elementos:
El primer índice es 1, no 0.
fuente
my_array(0) := 'some string';
array.extend();
¿ EXTENDE agrega una ranura a una matriz acotada regular? En ese caso, ya es de tamaño dinámico, por lo que no sería necesaria una tabla (matriz sin límites).varray(3)
4 veces: obtienes un error de "subíndice fuera de límite".array.extend()
. Todos los lugares donde miré no mostraron esto y fue la parte más importante para poder agregar más de un elemento (según tengo entendido, todavía nuevo en los arreglos en SQL).Simplemente puede declarar un DBMS_SQL.VARCHAR2_TABLE para contener una matriz de longitud variable en memoria indexada por un BINARY_INTEGER:
Podría usar una matriz asociativa (solía llamarse tablas PL / SQL) ya que son una matriz en memoria.
La matriz asociativa puede contener cualquier composición de tipos de registro.
Espero que ayude, Ollie.
fuente
VALUE_ERROR
cuando la colección está vacía. Sugeriría usar más bienFOR i IN 1 .. employee_array.COUNT
en este casosys.odcivarchar2list
siguiente tiene la ventaja de que también tiene un constructor a mano, por ejemplo, para la inicialización predeterminada de la función param:sys.odcivarchar2list('val1','val2')
Otra solución es usar una Colección Oracle como Hashmap:
fuente
También puedes usar un
oracle defined collection
Usaría una matriz en memoria. Pero con la
.COUNT
mejora sugerida por uziberia:Otra solución sería usar un Hashmap como lo hizo @Jchomel aquí .
NÓTESE BIEN:
¡Con Oracle 12c puede incluso consultar matrices directamente ahora !
fuente
Programas de muestra de la siguiente manera y proporcionados en el enlace también https://oracle-concepts-learning.blogspot.com/
tabla plsql o matriz asociada.
fuente