'SELECT PERGAMINHO FROM PERGAMINHOS WHERE PERGAMINHO_ID = :1' INTO L_PERGAMINHO USING P_PERGAMINHO_ID; L_TOTAL_PALAVRAS := GOOGLE_DEV_DAY_BRASIL_2011.COUNT_PALAVRAS(L_PERGAMINHO, GOOGLE_DEV_DAY_BRASIL_2011.SEPARADOR); L_PERGAMINHO := L_PERGAMINHO || GOOGLE_DEV_DAY_BRASIL_2011.SEPARADOR; L_INICIO := 1; FOR I IN 1 .. L_TOTAL_PALAVRAS LOOP L_PALAVRA := SUBSTR(L_PERGAMINHO, L_INICIO, INSTR(L_PERGAMINHO, GOOGLE_DEV_DAY_BRASIL_2011.SEPARADOR, 1, I) - L_INICIO); L_INICIO := INSTR(L_PERGAMINHO, GOOGLE_DEV_DAY_BRASIL_2011.SEPARADOR, 1, I) + 1; INSERT INTO PALAVRAS(PALAVRA_ID, PERGAMINHO_ID, ORDEM, PALAVRA) VALUES(PALAVRAS_SEQ.NEXTVAL, P_PERGAMINHO_ID, I, L_PALAVRA); END LOOP; EXCEPTION WHEN OTHERS THEN BEGIN DBMS_OUTPUT.PUT_LINE(SQLERRM); END;END;GOOGLE_DEV_DAY_BRASIL_2011 e o pacote que agrupara todos os procedimentos e funcoes, mais na frente sera mostrado a sua implementacao. GOOGLE_DEV_DAY_BRASIL_2011.SEPARADOR e uma constante definida no pacote GOOGLE_DEV_DAY_BRASIL_2011.Primeira Questao - PreposicaoPrimeiramente, as letras Googlon sao classificadas em dois grupos: as letras v, k, b, p e s sao chamadas "letras tipo foo", enquanto que as demais sao conhecidas como "letras tipo bar".Os linguistas descobriram que as preposicoes em Googlon sao as palavras de 5 letras que terminam numa letra tipo bar, mas onde nao ocorre a letra w.Montamos a seguinte Expressao Regular:^[^w]{4}[^wvkbps]$Interpretando a Expressao Regular temos: As 4 primeiras letras nao sao w e o ultima letra nao e v, k, b, p, s (letras tipo foo) e w. 4 + 1 = 5 letras.Implementando o procedimento CALCULA_PREPOSICAO, o mesmo ira contar o numero de preposicoes por meio de uma consulta que utiliza REGEXP_LIKE aplicando a Expressao Regular, em seguida ira armazenar o resultado na tabela PERGAMINHOS. A segunda e terceira questao tambem segue a mesma logica.PROCEDURE CALCULA_PREPOSICAO(P_PERGAMINHO_ID NUMBER) IS L_EXPRESSAO_REGULAR VARCHAR2(32) := '^[^w]{4}[^wvkbps]$';BEGIN EXECUTE IMMEDIATE 'UPDATE PERGAMINHOS P SET P.PREPOSICAO = ( SELECT COUNT(*) FROM PALAVRAS WHERE PERGAMINHO_ID = P.PERGAMINHO_ID AND REGEXP_LIKE(PALAVRA,:1) ) WHERE PERGAMINHO_ID = :2' USING L_EXPRESSAO_REGULAR, P_PERGAMINHO_ID; EXCEPTION WHEN OTHERS THEN BEGIN DBMS_OUTPUT.PUT_LINE(SQLERRM); END; END;Segunda Questao - VerboUm outro fato interessante descoberto pelos linguistas e que, no Googlon, os verbos sempre sao palavras de 6 ou mais letras que terminam numa letra tipo foo.Chegamos na Expressao Regular:^.{5,7}[vkbps]$Interpretando: 6 ou mais letras, analisando a maior palavra possui 8 letras. 5 + 1 = 6 letras. 6 + 1 = 7 letras. 7 + 1 = 8 letras. Termina com v, k, b, p, s (letras tipo foo). Implementando o procedimento CALCULA_VERBO:PROCEDURE CALCULA_VERBO(P_PERGAMINHO_ID NUMBER) IS L_EXPRESSAO_REGULAR VARCHAR2(32) := '^.{5,7}[vkbps]$';BEGIN EXECUTE IMMEDIATE 'UPDATE PERGAMINHOS P SET P.VERBO = ( SELECT COUNT(*) FROM PALAVRAS WHERE PERGAMINHO_ID = P.PERGAMINHO_ID AND REGEXP_LIKE(PALAVRA,:1) ) WHERE PERGAMINHO_ID = :2' USING L_EXPRESSAO_REGULAR, P_PERGAMINHO_ID; EXCEPTION WHEN OTHERS THEN BEGIN DBMS_OUTPUT.PUT_LINE(SQLERRM); END; END;Terceira Questao - Verbo em Primeira PessoaAlem disso, se um verbo comeca com uma letra tipo foo, o verbo esta em primeira pessoa.Expressao Regular:^[vkbps].{4,6}[vkbps]$Interpretando: Verbo que comeca com v, k, b, p, e s (letra tipo foo). 1 + 4 + 1 = 6 letras, 1 + 5 + 1 = 7 letras. 1 + 6 + 1 = 8 letras.Implementando o procedimento CALCULA_VERBO_PRIMEIRA_PESSOA:PROCEDURE CALCULA_VERBO_PRIMEIRA_PESSOA(P_PERGAMINHO_ID NUMBER) IS L_EXPRESSAO_REGULAR VARCHAR2(32) := '^[vkbps].{4,6}[vkbps]$';BEGIN EXECUTE IMMEDIATE 'UPDATE PERGAMINHOS P SET P.VERBO_PRIMEIRA_PESSOA = ( SELECT COUNT(*) FROM PALAVRAS WHERE PERGAMINHO_ID = P.PERGAMINHO_ID AND REGEXP_LIKE(PALAVRA,:1) ) WHERE PERGAMINHO_ID = :2' USING L_EXPRESSAO_REGULAR, P_PERGAMINHO_ID; EXCEPTION WHEN OTHERS THEN BEGIN DBMS_OUTPUT.PUT_LINE(SQLERRM); END; END;Quarta Questao - Lista de vocabularioA ordem do alfabeto Googlon e: dcxkjsmvrlgftwpqznbh. Foi solicitado uma lista