Отсутствует ошибка выражения при создании представления - PullRequest
0 голосов
/ 16 октября 2018

У меня есть следующий запрос оракула для создания представления:

    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

, который выбрасывает

ORA-00936: отсутствует ошибка выражения при запуске.

Какова возможная причина этого?

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Похоже, вы пытаетесь использовать функцию SQL Server convert() .У Oracle есть собственная convert() функция , но она вообще не связана:

CONVERT преобразует строку символов из одного набора символов в другой.

Наиболее близким эквивалентом функции SQL Server, которую я вижу, было бы приведение к ней:

      ,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

При описании представления столбец будет отображаться как NUMBER(1), что, как я полагаю, является точкой преобразования /в первую очередь, поскольку вы знаете, что оно уже соответствует ограничению масштаба / точности.

0 голосов
/ 16 октября 2018

изменить это:

,CONVERT('1', CASE 

Функция Oracle / PLSQL CONVERT преобразует строку из одного набора символов в другой.CONVERT (string1, char_set_to [, char_set_from])

Вы должны дать в строке там

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...