Solapas principales

Pregunta
Daniel Aguilar · Sep 8, 2020

Error SQL tras actualizar

Buenas tardes estamos probando a actualizar una versión 2014 a la 2018 para posteriormente actualizar a la versión 2019 y nos hemos encontrado con este problema al pasar de la 2014 a la 2018.

Tras actualizar si ejecutamos una Query de actualización desde el portal nos da el siguiente error:

 

He comprobado que si desde el Studio compilo la clase este error desaparece. He podido comprobar que en la clase .int que contiene la compilada tiene un parámetro menos %ouid

He intentado recompilar todas las clases desde un terminal ejecutando  do $SYSTEM.OBJ.CompileAllNamespaces() pero me da la impresión de que no recompila nada, sin embargo si compilo la clase manualmente desde el Studio empieza a funcionar.

¿Alguien sabe como lanzar por terminal una compilación masiva con las mismas opciones que usa el studio para compilar?

 

00
2 0 4 43

Respuestas

Hola,

$SYSTEM.OBJ.CompileAllNamespaces() -- Compila las clases de TODOS los namespaces

Normalmente es más sencillo ir Namespace por Namespace (si hay varios) y se hace con $SYSTEM.OBJ.CompileAll(). Este método puede recibir "flags" de compilación. Yo suelo usar "ckub":

$SYSTEM.OBJ.CompileAll("ckub")

Para ver los flags de compilación disponibles:

USER>Do $system.OBJ.ShowFlags()

 See $system.OBJ.ShowQualifiers() for comprehensive list of qualifiers as flags have been superseded by qualifiers

    b - Include sub classes.
    c - Compile. Compile the class definition(s) after loading.
    d - Display. This flag is set by default.
    e - Delete extent.
    h - Show hidden classes.
    i - Validate XML export format against schema on Load.
    k - Keep source.  When this flag is set, source code of
        generated routines will be kept.
    l - Lock classes while compiling.  This flag is set by default.
    p - Percent.  Include classes with names of the form %*.
    r - Recursive.  Compile all the classes that are dependency predecessors.
    s - Process system messages or application messages.
    u - Update only.  Skip compilation of classes that are already up-to-date.
    y - Include classes that are related to the current class in the way that
        they either reference to or are referenced by the current class in SQL usage.

These flags are deprecated a, f, g, n, o, q, v
Default flags for this namespace 
You may change the default flags with the SetFlags(flags,system) classmethod.

Muchas gracias David,

Estuve probando con esos flags pero no me funcionaba.

Por lo visto trasteando con el control de versiones hice algo que corrompió el namespace en el que estaba trabajando.

Finalmente conseguí solucionarlo haciendo lo siguiente:

Desde:  Sistema -> Sql

Pulsé en "Ajustar todas las tablas" creo que esto lanza también la opción "Purgrar consultas en memoria caché".

Tras esto volví a lanzar un:

Do $System.OBJ.CompileAll("cukb")

Me recompiló todas las rutinas correctamente y empezó a funcionar todo de nuevo.

Muchas gracias.

Un saludo.

me alegro de que ya esté funcionando !