Oracle: DatePart debe definirse...?
Frecuentes
Visto 1,903 veces
-1
¿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;
2 Respuestas
2
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
1
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 oracle or haz tu propia pregunta.
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? - SkulmukPregunta diferente, pero... supongo que es una
IN
parámetro a un procedimiento almacenado? Puedes hacerloIN 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