¿Cuál es el significado de "select * from relational (owner.table)"?


8

Recientemente recibimos algunos errores en nuestro registro de alertas del formulario

301598: Tue Jul 16 03:58:29 2013
301599: ORA-01555 caused by SQL statement below 
301600: SELECT * FROM RELATIONAL(<owner>.<table>)

Sé cómo manejar los errores de ORA-01555, pero nunca encontré algo así SELECT * FROM RELATIONAL. Miré dentro DBA_OBJECTS, pero no existe tal función / operador / lo que sea.

Buscar en Google 'SELECCIONAR * DE RELACIONAL' solo devolvió preguntas relacionadas con ORA-01555.

Entonces, mi pregunta es: ¿Cuál es el significado de la palabra clave RELACIONAL aquí?


2
Parece que esto es algo profundamente interno. Porque support.oracle.com también muestra solo la misma información que ya buscaste en Google.
Mindaugas Riauba

2
Estoy 99% seguro de que esto es para consultar el tipo de datos XMLTYPE, pero no puedo encontrar la referencia, ya que obviamente relationales una palabra muy difícil de buscar en la documentación de la base de datos.
Gay

1
@Gaius No creo que esté relacionado con XMLTYPE (la tabla no contiene una columna XMLTYPE).
Frank Schmitt

1
Encontré esto, podría ayudar: forums.oracle.com/thread/1042943?start=0&tstart=0
Iľja

cambie su parámetro de deshacer retención
user3556458

Respuestas:


1

Parece ser inerte. Probé esto en XE 11 y descubrí que no hace nada.

CREATE TABLE dbausers AS SELECT * FROM dba_users;

-- Function doesn't affect result set.
SELECT * FROM dbausers
MINUS
SELECT * FROM RELATIONAL(dbausers);

SELECT * FROM RELATIONAL(dbausers)
MINUS
SELECT * FROM dbausers;

0

Creo que este fue un alias en desuso para la función TABLE de hoy para las funciones canalizadas, pero ahora no puedo encontrar mi referencia que diga esto.


0

De acuerdo con este artículo del blog, la sugerencia específica RELATIONALindica al Optimizador de consultas que

... convierte el objeto en una tabla relacional, similar a la función RELACIONAL ...

Un segundo artículo en la Comunidad Oracle afirma que

La sugerencia RELACIONAL hace que Oracle anule los datos del objeto e inserte los datos del atributo en lugar del objeto. Las sugerencias utilizadas solo pueden ser utilizadas por Oracle, por lo que no están documentadas ...

Creo que esto es solo un problema de una consulta de larga duración, que está siendo expuesta por el error ORA-01555 mientras usa internamente una sugerencia de consulta, que no está documentada.


Las sugerencias de consulta están anidadas en / * bloques de comentarios * /. Esto parece ser otra cosa.
durette

0

Como lo demostró durette, este es un elenco inútil. La mayoría de las tablas son RELACIONALES, y ese es el valor predeterminado. Sin embargo, Oracle también admite tablas OBJECT (consulte la sintaxis en los documentos CREATE TABLE de Oracle ), lo que explica la razón de la sintaxis interna. No hay ninguna razón para usar RELATIONAL en una consulta, pero tampoco hay razón para que falle. Debería centrarse en las soluciones generales para ORA-01555. ORA-01555 generalmente significa que sus segmentos UNDO no son suficientes para manejar la tasa de cambio en su base de datos.

¿Puede reproducir este error a pedido? ¿Cómo se ejecuta la consulta ofensiva antes de que falle? ¿O es su verdadera pregunta, "¿Cómo puedo rastrear el SQL que causó este error?"

Además, no especificó su versión de Oracle y el nivel de parche.


2
Te das cuenta, por supuesto, que la pregunta tiene casi seis años.
mustaccio

No estaba interesado en arreglar el ORA-01555 (sé cómo hacerlo, como mencioné en mi pregunta). Simplemente estaba interesado en la extraña llamada / sintaxis de función RELACIONAL, pero mi curiosidad ha disminuido con los años :-)
Frank Schmitt

1
Si ya no desea comentarios sobre esta pregunta, puede eliminarla o aceptar una respuesta. Mientras el intercambio de pila considere que esta pregunta no tiene respuesta, continuará incitando a las personas a ayudar.
Gordon Hopper

-3

La línea debajo de "ORA-01555 causada por la instrucción SQL a continuación" es la instrucción SQL que hace que UNDO se intercambie.

Entonces RELACIONAL no es una cosa de Oracle, es un objeto creado por un usuario. Es una función con el parámetro owner.table.


2
Si fuera una función creada por un usuario, ¿no debería estar presente en DBA_OBJECTS?
Frank Schmitt
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.