DECLARE /* ------------------------------------------------------------------------------------------- - L_JSON_RESPONSE: Variável do tipo CLOB (Character Large Object) que armazenará a resposta JSON da API. - L_NEXT_URL: Variável do tipo VARCHAR2 que armazena a URL da próxima página de resultados da API. - L_POKEMON_NAME: Variável do tipo VARCHAR2 que não é utilizada diretamente no código, mas poderia ser usada para armazenar o nome do Pokémon se necessário. - ID: Variável do tipo NUMBER usada para armazenar o ID do Pokémon extraído da URL. ------------------------------------------------------------------------------------------- */ L_JSON_RESPONSE CLOB; L_NEXT_URL VARCHAR2(4000); L_POKEMON_NAME VARCHAR2(100); ID NUMBER; BEGIN -- URL inicial da API para obter os Pokémon L_NEXT_URL := 'https://pokeapi.co/api/v2/pokemon/'; -- Loop para continuar a buscar enquanto houver uma próxima página LOOP -- Faz a requisição à API L_JSON_RESPONSE := APEX_WEB_SERVICE.MAKE_REST_REQUEST( P_URL => L_NEXT_URL, P_HTTP_METHOD => 'GET' ); -- Se a resposta não for nula, processa a lista de Pokémon IF L_JSON_RESPONSE IS NOT NULL THEN -- Loop para processar os nomes dos Pokémon FOR C1 IN ( SELECT JT.name, JT.url FROM JSON_TABLE( L_JSON_RESPONSE, '$.results[*]' COLUMNS ( name PATH '$.name', url PATH '$.url' ) ) JT ) LOOP ID := REGEXP_SUBSTR(C1.url, '(\d+)(/|\?)$', 1, 1, NULL, 1); -- Filtrar somente a 1° geração IF ID <= 151 THEN -- Insert na tabela base INSERT INTO POKEMON (ID_POKEMON, NAME_POKEMON, URL_POKEMON) VALUES (ID, C1.name, C1.url); END IF; END LOOP; -- Obtém a URL da próxima página de resultados BEGIN SELECT JT.next INTO L_NEXT_URL FROM JSON_TABLE( L_JSON_RESPONSE, '$' COLUMNS ( next PATH '$.next' ) ) JT; -- Se a URL for null ou vazia, sai do loop IF L_NEXT_URL IS NULL OR L_NEXT_URL = '' OR ID > 151 THEN EXIT; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN -- Se não houver o campo 'next', sai do loop EXIT; END; ELSE DBMS_OUTPUT.PUT_LINE('Resposta vazia recebida.'); EXIT; -- Se não houver resposta, sai do loop END IF; END LOOP; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Erro ao processar a requisição: ' || SQLERRM); END;