Pregunta

Suponga que tengo algunos tipos de datos definidos en PL / SQL:

TYPE foo_t IS RECORD (...);
TYPE foo_table_t IS TABLE OF foo_t INDEX BY BINARY_INTEGER;

TYPE bar_t IS RECORD (...);
TYPE bar_table_t IS TABLE OF bar_t INDEX BY BINARY_INTEGER;

¿Es posible para mí escribir un procedimiento capaz de aceptar cualquier tipo de datos derivados de TABLE (por ejemplo, un foo_table_t o un bar_table_t ) como parámetro? El procedimiento no necesita conocer los tipos de fila de la tabla. Un ejemplo trivial:

PROCEDURE remove_last(some_table ...) IS
BEGIN
    some_table.DELETE(some_table.LAST);
END;
¿Fue útil?

Solución

No directamente. De la guía del programador PL / SQL:

" El parámetro real y su parámetro formal correspondiente deben tener tipos de datos compatibles. "

PL / SQL realiza una conversión implícita de tipos de datos de parámetros reales a tipos de datos de parámetros formales. Por lo tanto, podría pasar un valor numérico a un procedimiento que quiera una cadena, y funcionaría porque puede hacer una conversión implícita.

Lo mejor que podría hacer sería escribir procedimientos sobrecargados:

PROCEDIMIENTO genérico (foo IN OUT foo_t);

PROCEDIMIENTO genérico (bar IN OUT bar_t);

Entonces puede llamar genérico con cualquier tipo de registro. Esto pierde atractivo en proporción al número de tipos de registros a manejar :-D

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top