Pasar el parámetro de la tabla usando la cláusula de selección en Oracle

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 ()?

preguntado el 12 de junio de 12 a las 16:06

1 Respuestas

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, 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

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.