«Национальный» символ (юникод) в запросах SAP HANA с параметрами и переменными - PullRequest
0 голосов
/ 11 декабря 2018

Почему я не могу продолжить использование неанглийских символов с N' при указании значения для входного параметра в запросе «SQL» SAP HANA, в то время как я могу для входной переменной?

Например, работает следующий запрос (обратите внимание на N' в предложении WHERE, созданном из входной переменной):

SELECT 
       "NDATA", "DATA", "CC_NON_ENGLISH"
      , sum("ID") AS "ID" 
FROM 
    "_SYS_BIC"."Test/MY_VIEW" 
    ('PLACEHOLDER' = ('$CC_PARAM$', 'दिल्ली भारत की राजधानी है.')) 
WHERE 
    (("NDATA" IN (N'दिल्ली भारत की राजधानी है.'))) 
GROUP BY 
      "NDATA", "DATA", "CC_NON_ENGLISH"

Однако, если я добавлю N' вперед значением CC_PARAM я получаю синтаксическую ошибку.

 SELECT 
        "NDATA", "DATA", "CC_NON_ENGLISH"
      , sum("ID") AS "ID" 
 FROM 
       "_SYS_BIC"."Test/MY_VIEW" 
         ('PLACEHOLDER' = ('$CC_PARAM$', N'दिल्ली भारत की राजधानी है.')) 
 WHERE (("NDATA" IN (N'दिल्ली भारत की राजधानी है.'))) 
 GROUP BY  
         "NDATA", "DATA", "CC_NON_ENGLISH" 

Результирующая ошибка:

Could not execute 'SELECT "NDATA", "DATA", "CC_NON_ENGLISH", sum("ID") AS "ID" FROM ...' 
 SAP DBTech JDBC: [257]: sql syntax error: 
 incorrect syntax near "दिल्ली भारत की राजधानी है.": line 7 col 3 (at pos 173)

Обычно при написании SQL-запросов в HANA, когда строке Unicode нужно предшествовать N', а когда - нетЭто?

Я заметил, что могу выполнить данный запрос вообще без N', и он работает нормально, так что здесь происходит?

1 Ответ

0 голосов
/ 12 декабря 2018

Модификатор N' для строковых литералов помечает эти строковые литералы как строки Юникода для SQL.Это почти то же самое, что предоставить строку с TO_NVARCHAR() в том смысле, что база данных должна обрабатывать полученное значение как строку Unicode, за исключением того, что для буквенной версии клиент гарантирует, что строка является строкой Unicode.

Это стандартное поведение SQL.

Для специфического для SAP HANA (читай проприетарного ) PLACEHOLDER (используется для предоставления значений для параметров представления расчета) всегда принимает входные строки какСтроки Unicode.Кроме того, он не позволяет использовать модификатор N' (или функции SQL в этом отношении).

Вкратце: если вы хотите указать строковые литералы Unicode в SQL, вы можете / должны использовать модификатор N',Когда вы используете специфический синтаксис и команды SAP HANA, вы неявно всегда предоставляете строку Unicode и не должны использовать модификатор N'.

...