Tengo la siguiente consulta de Oracle para crear una vista:

    CREATE VIEW uvw_Dashboard_Templates
    AS
    SELECT LL.ID
          ,LL.LoadDate
          ,LL.FileName
          ,LL.TemplateType
          ,LL.AnalystName
          ,LL.RecDate
          ,LL.CompanyID
          ,LL.CompanyName
          ,LL.Recommendation
          ,LL.Loaded
          ,LL.ErrorText
          ,CASE 
            WHEN LL.NewCompany = 1 AND LL.Loaded = 0 THEN 0
            ELSE LL.NewCompany END NewCompany
          ,RH.rec_date LastRecDate
          ,RH.rec_code LastRecCode
          ,CONVERT(NUMBER(1), CASE 
             WHEN LL.Loaded = 1 AND NVL(LL.Recommendation, 'Rec') <> 
             NVL(RH.rec_code,'LastRec') THEN 1
             ELSE 0 END) RecChanged
    FROM tblTemplates_LoadLog LL
    LEFT JOIN (
    SELECT company_id, rec_date, rec_code 
    FROM (
        SELECT company_id
            , rec_date
            , UPPER(rec_code) rec_code
            , ROW_NUMBER() OVER(PARTITION BY company_id ORDER BY rec_date DESC) RowNumber
        FROM tblRecHist            
        ) OrderedList
    WHERE RowNumber = 2) RH 
ON LL.CompanyID = RH.company_id

Que esta lanzando un

ORA-00936: Error de expresión faltante al ejecutar.

¿Cuál es la posible causa de esto?

-2
Vikesh Gupta 16 oct. 2018 a las 15:10

2 respuestas

La mejor respuesta

Parece que está intentando utilizar Función convert() de SQL Server. Oracle tiene su propio convert() función, pero no está relacionada en absoluto:

CONVERT convierte una cadena de caracteres de un juego de caracteres a otro.

El equivalente más cercano que puedo ver a la función de SQL Server sería lanzarlo:

      ,CAST(CASE 
         WHEN LL.Loaded = 1 AND NVL(LL.Recommendation, 'Rec') <> 
         NVL(RH.rec_code,'LastRec') THEN 1
         ELSE 0 END AS NUMBER(1)) RecChanged

Describir la vista mostraría la columna como NUMBER(1), que supongo que es el punto de convertirla / lanzarla en primer lugar, ya que sabes que ya se ajusta a la restricción de escala / precisión.

1
Alex Poole 16 oct. 2018 a las 12:30

Cambia esto:

,CONVERT('1', CASE 

La función CONVERTIR de Oracle / PLSQL convierte una cadena de un juego de caracteres a otro. CONVERT (cadena1, char_set_to [, char_set_from])

Tienes que ceder en la cuerda allí

2
nikhil sugandh 16 oct. 2018 a las 12:22