Как использовать JSON_VALUE с переменной - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть утверждение, которое я пытаюсь построить в Oracle 18 c. Следующая строка отлично работает:

Select JSON_VALUE(l_resp, '$.items[0].volumeInfo.industryIdentifiers[1].type')
  into l_temp_var
  from dual;

Однако мне нужно изменить второй индекс на переменную. Второй индекс в настоящее время содержит [1]. Я пытался использовать [i], определенный как цифра c или varchar, но это не работает. Как я могу построить оператор Select JSON_VALUE, чтобы он использовал переменную? Спасибо за просмотр.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2020

Я не мог заставить конкатенацию работать. Я попробовал другой подход. Мне пришлось поместить «тип» и «идентификатор» в таблицу Json.

    --Obtain the NVP values of "industryIdentifiers" e.g. ISBN_10, ISBN_13 .
    For rowz in 
        (select *
            from json_table(l_resp, '$.items[0].volumeInfo.industryIdentifiers[*]' 
                            columns (ii_type varchar2(512) path '$.type',
                                     ii_identifier varchar2(512) path '$.identifier'
                                     ) 
                            ) j_ii_tab
        )
    Loop
/*
    If rowz.ii_type = 'ISBN_10' Then
        :P133_ISBN_10 := rowz.ii_identifier;
    Elsif rowz.ii_type = 'ISBN_13' Then
        :P133_ISBN_13 := rowz.ii_identifier;
    End If ;
*/    
    dbms_output.put_line('ii_type: ' || rowz.ii_type);
    dbms_output.put_line('ii_identifier: ' || rowz.ii_identifier);
    End Loop rowz;

Может быть полезно увидеть данные Json по адресу: https://www.googleapis.com/books/v1/volumes?q=isbn: 9781484204856

0 голосов
/ 15 февраля 2020

Используйте конкатенацию строк для построения строки индекса. Например:

BEGIN
  FOR i IN 1..10 LOOP
    Select JSON_VALUE(l_resp, '$.items[0].volumeInfo.industryIdentifiers[' || i || '].type')
      into l_temp_var
      from dual;

    -- Do something with the value in l_temp_var here

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