Pasar el parámetro de la tabla usando la cláusula de selección en Oracle
Frecuentes
Visto 1,157 veces
1
Tengo 2 tipos:
CREATE OR REPLACE TYPE id_type AS OBJECT
(
id NUMBER(19, 0)
);
CREATE OR REPLACE TYPE id_table AS TABLE OF id_type;
Y tengo una función A (param IN id_table).
Ahora, si tengo otra función usando la primera, ¿cómo se supone que debo pasar el parámetro así A (SELECCIONAR 1 DE DUAL)? ¿Solo puedo hacerlo manualmente creando una var id_table, llenándola y luego pasando a la función A ()?
1 Respuestas
1
Puedes hacer algo como
DECLARE
l_ids id_table;
l_return <<data type>>;
BEGIN
SELECT id_type( 1 )
BULK COLLECT INTO l_ids
FROM dual;
l_return := a( l_ids );
END;
Sin embargo, no es obvio por qué tienes una id_type
en este caso. Parecería más lógico declarar simplemente id_table
CREATE OR REPLACE TYPE id_table
AS TABLE OF NUMBER(19,0);
Tampoco es obvio si realmente tiene la intención de completar la colección seleccionando dual. Si realmente desea tener una colección de un solo elemento, simplemente puede inicializarla. Sin embargo, supongo que realmente tiene la intención de completar la colección consultando una tabla que no sea DUAL
en cuyo caso preferirías el BULK COLLECT
DECLARE
l_ids id_table := new id_table( id_type( 1 ) );
l_return <<data type>>;
BEGIN
l_return := a( l_ids );
END;
Respondido el 12 de junio de 12 a las 16:06
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas sql oracle plsql or haz tu propia pregunta.
No, traje SELECT FROM DUAL solo como ejemplo. Realmente tengo varios números para poner en colección. Y voy a SELECCIONAR estos números. - Oleg
@Oleg: si esos números provienen de una tabla, usaría el
BULK COLLECT
. Si desea codificar una lista de números, usaría el enfoque de inicialización manual de mi último fragmento de código. - Justin cueva