Oracle SQL: как использовать первый символ заголовка столбца, а не значение?

Я построил оператор, в котором результат помещается в файл.json.

С SQLcl он начинается как:

SET ENCODING UTF-8
SET SQLFORMAT JSON
SPOOL language.json

Затем я делаю выбор. Просто пример:

SELECT
    INITCAP(ltl.language) language,

// ... goes on

Выход:

"language":"En-Us"

Это будет капитализировать стоимость language - а что если я захочу language быть Language в дамп.json?

Я попробовал следующее:

SELECT
    ltl.language INITCAP(language),

// ... goes on

Но это неверный запрос.

Кроме того, изменение языка на язык в запросе не имеет значения - оно преобразуется в нижний регистр:

SELECT
    INITCAP(ltl.language) Language,

Выход:

"language":"en-US"

Мой желаемый результат:

Выход:

"Language":"en-US"

Как мне добиться этого из запроса?

2 ответа

Решение

Вы не можете влиять на случай пары ключей JSON, генерируемой KEYS при использовании /*json*/ или SQLFORMAT json. В соответствии с нашей спецификацией Oracle, они предназначены для строчных букв.

Вам нужно было бы создать свой собственный генератор JSON или написать несколько сценариев оболочки с использованием RegEX или чего-то еще, что вам пригодится, чтобы ввести ключи после завершения.

Вы можете использовать функцию regexp_replace().

Я не знаю, как вы составляете свою окончательную полезную нагрузку JSON, но обходной путь будет примерно таким:

select regexp_replace('"language":"en-US"', '[a-z]', upper(substr('"language":"en-US"', 2, 1)), 1, 1, 'i') 
from dual ; 


SQL> select regexp_replace('"language":"en-US"', '[a-z]', upper(substr('"language":"en-US"', 2, 1)), 1, 1, 'i') language from dual

LANGUAGE
------------------
"Language":"en-US"

SQL>

Эта реализация предполагает, что первая буква - это та, которую вы хотите преобразовать, но эта буква идет после ожидаемого символа двойной кавычки. (второе место в строке)

С уважением

Другие вопросы по тегам