Oracle: DatePart debe definirse...?

¿Alguna idea de por qué la siguiente línea se queja de que DATEPART no está definido como identificador?

IF DATEPART(v_ExpireTime, year) = 1899 THEN v_ExpireTime := NULL;

Vuelve: Error(68,10): PLS-00201: identifier 'DATEPART' must be declared

EDITAR: No importa, encontré la respuesta. ahora hago:

IF to_number(to_char(v_ExpireTime, 'YY')) = 1899 THEN v_ExpireTime := NULL;

preguntado el 28 de agosto de 12 a las 10:08

2 Respuestas

Como ya has descubierto, DATEPART es una función de SQL Server, no de Oracle. La alternativa que has mostrado, to_number(to_char(v_ExpireTime, 'YY')), le dará un valor de dos dígitos, por lo que si la parte del año de su fecha es 1899 solo regresará 99, por lo que no obtendrá una coincidencia. Puede utilizar el modelo de formato de fecha de año de cuatro dígitos YYYY en lugar de YY.

Otra opción es usar el función de extracción:

IF extract(year from v_ExpireTime) = 1899 THEN ...

Respondido 28 ago 12, 10:08

Saludos por eso Alex. Oracle ahora se queja de que v_ExpireTime no se puede usar como destino de asignación (supongo que el v_ExpireTime := NULL; parte). ¿Cómo debo arreglar esto? - Skulmuk

Pregunta diferente, pero... supongo que es una IN parámetro a un procedimiento almacenado? Puedes hacerlo IN OUT que podría tener efectos secundarios inesperados en el cliente, o agregar una variable local a la que se le asigna el valor original y se restablece en nulo en esta instancia. - alex poole

Si estoy en lo cierto, es porque DatePart no es parte de la biblioteca PLSQL, por lo que no sabe lo que está haciendo. El segundo método es para PLSQL.

Respondido 28 ago 12, 10:08

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