Por exemplo, falando de fatures/built-ins que foram REMOVIDAS mesmo depois de
vários anos depreciadas, podemos exemplificar com a feature de STREAMS, no
banco 19c afaik ela foi mesmo removida, Não Existe mais : é por conta do
aplicador/migrador alterar os códigos/processos que dependiam de STREAMS para
funcionar, nenhuma tool é disponibilizada para isso afaik....
O máximo que a Oracle faz é no script de pré-upgrade do 19c já te AVISAR que o
banco a ser migrado contém Streams, okdoc ??
Abraços,
Chiappa
Em sexta-feira, 22 de maio de 2020 16:51:58 BRT, Jose Laurindo Chiappa
[email protected] [oracle_br] <[email protected]> escreveu:
às vezes, em casos MUITO pontuais, depois de vários e vários anos que a
built-in foi depreciada aí SIM ela é mesmo Removida do banco , aí SIM vai haver
necessidade de re-escrita da app - e nesses RAROS casos, não, a Oracle via de
regra não te dá uma tool que já faça a substituição por você....
Abraços,
Chiappa
Em sexta-feira, 22 de maio de 2020 16:48:15 BRT, Jose Laurindo Chiappa
[email protected] [oracle_br] <[email protected]> escreveu:
Não sr : as tools de migração não fazem essa substituição porque ela Não É
Necessária : fato é, quando uma built-in interna é depreciada/descontinuada,
JUSTAMENTE para evitar re-escrita de código de apps legadas, ela CONTINUA
EXISTINDO, veja o caso aqui num banco 18c dessa package
dbms_obfuscation_toolkit depreciada :
SID:XE::C:\Users\User 2am>sqlplus system/oracle
SQL*Plus: Release 18.0.0.0.0 - Production on Sex Mai 22 16:43:32 2020
Version 18.4.0.0.0
Copyright (c) 1982, 2018, Oracle. All rights reserved.
Horário do último log-in bem-sucedido: Qui Mai 21 2020 16:30:11 -03:00
Conectado a:
Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production
Version 18.4.0.0.0
WHERE
------------------------------
CONTAINER=XEPDB1
1 linha selecionada.
SYSTEM@xepdb1::CONTAINER=XEPDB1> @desc dbms_obfuscation_toolkit
PROCEDURE DESDECRYPT
Nome do Argumento Tipo In/Out Padrão?
------------------------------ ----------------------- ------ --------
INPUT RAW IN
KEY RAW IN
DECRYPTED_DATA RAW OUT
FUNCTION DESDECRYPT RETURNS RAW
Nome do Argumento Tipo In/Out Padrão?
------------------------------ ----------------------- ------ --------
INPUT RAW IN
KEY RAW IN
PROCEDURE DESDECRYPT
Nome do Argumento Tipo In/Out Padrão?
------------------------------ ----------------------- ------ --------
INPUT_STRING VARCHAR2 IN
KEY_STRING VARCHAR2 IN
DECRYPTED_STRING VARCHAR2 OUT
FUNCTION DESDECRYPT RETURNS VARCHAR2
Nome do Argumento Tipo In/Out Padrão?
------------------------------ ----------------------- ------ --------
INPUT_STRING VARCHAR2 IN
KEY_STRING VARCHAR2 IN
PROCEDURE DESENCRYPT
Nome do Argumento Tipo In/Out Padrão?
------------------------------ ----------------------- ------ --------
INPUT RAW IN
KEY RAW IN
ENCRYPTED_DATA RAW OUT
FUNCTION DESENCRYPT RETURNS RAW
Nome do Argumento Tipo In/Out Padrão?
------------------------------ ----------------------- ------ --------
INPUT RAW IN
KEY RAW IN
PROCEDURE DESENCRYPT
Nome do Argumento Tipo In/Out Padrão?
------------------------------ ----------------------- ------ --------
INPUT_STRING VARCHAR2 IN
KEY_STRING VARCHAR2 IN
ENCRYPTED_STRING VARCHAR2 OUT
FUNCTION DESENCRYPT RETURNS VARCHAR2
Nome do Argumento Tipo In/Out Padrão?
------------------------------ ----------------------- ------ --------
INPUT_STRING VARCHAR2 IN
KEY_STRING VARCHAR2 IN
PROCEDURE DESGETKEY
Nome do Argumento Tipo In/Out Padrão?
------------------------------ ----------------------- ------ --------
SEED RAW IN
KEY RAW OUT
FUNCTION DESGETKEY RETURNS RAW
Nome do Argumento Tipo In/Out Padrão?
------------------------------ ----------------------- ------ --------
SEED RAW IN
PROCEDURE DESGETKEY
Nome do Argumento Tipo In/Out Padrão?
------------------------------ ----------------------- ------ --------
SEED_STRING VARCHAR2 IN
KEY VARCHAR2 OUT
FUNCTION DESGETKEY RETURNS VARCHAR2
Nome do Argumento Tipo In/Out Padrão?
------------------------------ ----------------------- ------ --------
SEED_STRING VARCHAR2 IN
PROCEDURE DES3DECRYPT
Nome do Argumento Tipo In/Out Padrão?
------------------------------ ----------------------- ------ --------
INPUT RAW IN
KEY RAW IN
DECRYPTED_DATA RAW OUT
WHICH BINARY_INTEGER IN DEFAULT
IV RAW IN DEFAULT
FUNCTION DES3DECRYPT RETURNS RAW
Nome do Argumento Tipo In/Out Padrão?
------------------------------ ----------------------- ------ --------
INPUT RAW IN
KEY RAW IN
WHICH BINARY_INTEGER IN DEFAULT
IV RAW IN DEFAULT
PROCEDURE DES3DECRYPT
Nome do Argumento Tipo In/Out Padrão?
------------------------------ ----------------------- ------ --------
INPUT_STRING VARCHAR2 IN
KEY_STRING VARCHAR2 IN
DECRYPTED_STRING VARCHAR2 OUT
WHICH BINARY_INTEGER IN DEFAULT
IV_STRING VARCHAR2 IN DEFAULT
FUNCTION DES3DECRYPT RETURNS VARCHAR2
Nome do Argumento Tipo In/Out Padrão?
------------------------------ ----------------------- ------ --------
INPUT_STRING VARCHAR2 IN
KEY_STRING VARCHAR2 IN
WHICH BINARY_INTEGER IN DEFAULT
IV_STRING VARCHAR2 IN DEFAULT
PROCEDURE DES3ENCRYPT
Nome do Argumento Tipo In/Out Padrão?
------------------------------ ----------------------- ------ --------
INPUT RAW IN
KEY RAW IN
ENCRYPTED_DATA RAW OUT
WHICH BINARY_INTEGER IN DEFAULT
IV RAW IN DEFAULT
FUNCTION DES3ENCRYPT RETURNS RAW
Nome do Argumento Tipo In/Out Padrão?
------------------------------ ----------------------- ------ --------
INPUT RAW IN
KEY RAW IN
WHICH BINARY_INTEGER IN DEFAULT
IV RAW IN DEFAULT
PROCEDURE DES3ENCRYPT
Nome do Argumento Tipo In/Out Padrão?
------------------------------ ----------------------- ------ --------
INPUT_STRING VARCHAR2 IN
KEY_STRING VARCHAR2 IN
ENCRYPTED_STRING VARCHAR2 OUT
WHICH BINARY_INTEGER IN DEFAULT
IV_STRING VARCHAR2 IN DEFAULT
FUNCTION DES3ENCRYPT RETURNS VARCHAR2
Nome do Argumento Tipo In/Out Padrão?
------------------------------ ----------------------- ------ --------
INPUT_STRING VARCHAR2 IN
KEY_STRING VARCHAR2 IN
WHICH BINARY_INTEGER IN DEFAULT
IV_STRING VARCHAR2 IN DEFAULT
PROCEDURE DES3GETKEY
Nome do Argumento Tipo In/Out Padrão?
------------------------------ ----------------------- ------ --------
WHICH BINARY_INTEGER IN DEFAULT
SEED RAW IN
KEY RAW OUT
FUNCTION DES3GETKEY RETURNS RAW
Nome do Argumento Tipo In/Out Padrão?
------------------------------ ----------------------- ------ --------
WHICH BINARY_INTEGER IN DEFAULT
SEED RAW IN
PROCEDURE DES3GETKEY
Nome do Argumento Tipo In/Out Padrão?
------------------------------ ----------------------- ------ --------
WHICH BINARY_INTEGER IN DEFAULT
SEED_STRING VARCHAR2 IN
KEY VARCHAR2 OUT
FUNCTION DES3GETKEY RETURNS VARCHAR2
Nome do Argumento Tipo In/Out Padrão?
------------------------------ ----------------------- ------ --------
WHICH BINARY_INTEGER IN DEFAULT
SEED_STRING VARCHAR2 IN
PROCEDURE MD5
Nome do Argumento Tipo In/Out Padrão?
------------------------------ ----------------------- ------ --------
INPUT RAW IN
CHECKSUM RAW(16) OUT
FUNCTION MD5 RETURNS RAW(16)
Nome do Argumento Tipo In/Out Padrão?
------------------------------ ----------------------- ------ --------
INPUT RAW IN
PROCEDURE MD5
Nome do Argumento Tipo In/Out Padrão?
------------------------------ ----------------------- ------ --------
INPUT_STRING VARCHAR2 IN
CHECKSUM_STRING VARCHAR2(16) OUT
FUNCTION MD5 RETURNS VARCHAR2(16)
Nome do Argumento Tipo In/Out Padrão?
------------------------------ ----------------------- ------ --------
INPUT_STRING VARCHAR2 IN
SYSTEM@xepdb1::CONTAINER=XEPDB1>
Sacou ?? Como os objetos depreciados na esmagadora maioria das vezes CONTINUAM
no banco, os eventuais códigos legados que os usam VÂO CONTINUAR FUNCIONANDO,
necessidade NENHUMA de alguma tool de conversão.... É POR CONTA DO
DESENVOLVEDOR passar a usar as novas alternativas nos próximos
desenvolvimentos, okdoc ??
Abraços,
Chiappa
Em sexta-feira, 22 de maio de 2020 15:39:55 BRT, Tiago de Assis Pimenta
[email protected] [oracle_br] <[email protected]> escreveu:
Eu entendi Chiappa, acho que não fui claro ao fazer a pergunta... Para o meu
caso do type JSON customizado no banco 11g, não há ferramentas que possam me
ajudar, isso já está entendido.
A minha pergunta foi em relação a pacotes nativos do Oracle que foram
substituídos, vou dar uma exemplo, no 11g, existia um pacote chamado
"dbms_obfuscation_toolkit", que na própria documentação da Oracle (
https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_obtool..htm#ARPLS028
), diz que foi descontinuada(deprecated) e que o pacote chamado "dbms_crypto",
substitui o pacote "dbms_obfuscation_toolkit".
As ferramentas que você comentou, nesse caso dos pacotes
"dbms_obfuscation_toolkit" e "dbms_crypto", fariam essa "migração" ?
[ ]s Em sexta-feira, 22 de maio de 2020 13:44:30 BRT, Jose Laurindo Chiappa
[email protected] [oracle_br] <[email protected]> escreveu:
NÃO, colega!!! Plz RELEIA a minha resposta, eu disse " E sendo customizado NÃO
TEM COMO as tools de migração da Oracle fazerem qquer conversão automáticamente
para vc" - e justamente o CONTRÁRIO, NÃO TEM ferramenta alguma que faça
mudança em código customizado não-Oracle!!!!
Em quinta-feira, 21 de maio de 2020 18:04:41 BRT, Tiago de Assis Pimenta
[email protected] [oracle_br] <[email protected]> escreveu:
Boa tarde Chiappa, tudo bem ???
Desculpa a demora, mas com esses feriados relâmpagos, ficou tudo mais confuso
ainda *rs*
Perfeito Chiappa, sobre as tools de migração, existe então ferramentas que,
quando os recursos nativos do Oracle, mudam de nome, essas ferramentas ajudam a
fazer essa migração ? Não conhecia essa possibilidade.
[ ]s Em segunda-feira, 18 de maio de 2020 11:44:19 BRT, Jose Laurindo
Chiappa [email protected] [oracle_br] <[email protected]>
escreveu:
Sim sr : com Absoluta Certeza já existe um objeto chamado JSON_VALUE , criado
de OUTRA maneira pelo Oracle : se vc olhar a documentação Oracle do 12c em
https://docs..oracle.com/database/121/SQLRF/functions093..htm#SQLRF56668 vc JÁ
VAI VER que no 12c já foi introduzida uma FUNÇÃO INTERNA com esse nome....
Então SIM, concordo com sua análise : lá na época do 11g alguém construiu um
código CUSTOMIZADO, com objetos CUSTOMIZADOS para simular as funções JSON que o
Oracle 11 não tinha E não tem, agora por Casualidade no 19c algum/alguns
desse(s) construtos e códigos CUSTOMIZADOS estão conflitando com o
código/construtos JSON built-in da Oracle.... E sendo customizado NÂO TEM COMO
as tools de migração da Oracle fazerem qquer conversão automáticamente para vc,
código CUSTOMIZADO é por definição código DE USUÁRIO, Não-Oracle.....
Suas duas alternativas então são :
1. RENOMEAR / reconstruir os objetos E códigos da solução JSON customizada aí
presente para que NÃO CONFLITEM com o que o banco 12c em diante (e 19c
inclusive, óbvio) já trazem
OU
2. recodificar a aplicação para que passe a usar os NOVOS objetos E as novas
built-in JSON do Oracle, ao invés de querer implementar o código customizado
antigo que simulava os objetos/códigos JSON
okdoc ?? OU SEJA, de qquer forma vc VAI TER QUE levantar quem e de que forma
criou a solução JSON customizada aí no 11g E DEPOIS analisar se é mais fácil
(em termos de esforço) adaptar nomes e objetos dela OU a alterar para usar os
built-ins Oracle..... É uma tarefa LOCAL que ninguém pode fazer por você : no
máximo, SE os desenvolvedores da solução json 11g optaram por re-usar um código
publicamente disponível (como https://sourceforge.net/p/pljson/wiki/Home/ , por
exemplo) TALVEZ algum desenvolvedor que já usava o mesmo código público possa
te dar umas dicas mais, MAS se na verdade os devs optaram por criar código
PRÓPRIO para simular o JSON em 11g aí só ELES é que podem alterar isso....
Abraços,
José Laurindo Chiappa
Em sábado, 16 de maio de 2020 01:50:47 BRT, Tiago de Assis Pimenta
[email protected] [oracle_br] <[email protected]> escreveu:
Chiappa,
JSON, XML e qualquer coisa relacionada, não entendo muito, então se eu falar
alguma besteira, me desculpe.
Pelo que eu entendi até agora, no 11g a empresa criou um "type JSON as object",
e os construtores são:
constructor function json return self as result,constructor function json(str
varchar2) return self as result,constructor function json(str in clob) return
self as result,constructor function json(cast json_value) return self as
result,constructor function json(l in out nocopy json_list) return self as
result Quando abri esse type "JSON", o erro está na linha:
"json_data json_value_array,"
Abrindo o type "JSON_VALUE_ARRAY", o erro está na linha:
"CREATE OR REPLACE TYPE "JSON_VALUE_ARRAY" as table of json_value;"
O erro é:
"Compilation errors for TYPE UMBRELLA.JSON_VALUE_ARRAY
Error: PLS-00488: 'JSON_VALUE' must be a typeLine: 1Text: CREATE OR REPLACE
TYPE "JSON_VALUE_ARRAY" as table of json_value;
Error: PL/SQL: Compilation unit analysis terminatedLine: 1Text: CREATE OR
REPLACE TYPE "JSON_VALUE_ARRAY" as table of json_value;"
Outra pessoa que está me ajudando nessa jornada, me pediu para criar alguns
sinônimos, entre eles, o json_value
"create synonym json_value for pljson_value;"
E não está criando, pelo que eu entendi, pois existe um type já com esse nome,
é isso ??
[ ]s Em sexta-feira, 15 de maio de 2020 19:28:49 BRT, Jose Laurindo Chiappa
[email protected] [oracle_br] <[email protected]> escreveu:
Ah, e outro detalhe importante : como o datatype JSON foi introduzido no 12c
mas sofreu ** várias ** melhorias no 18c e 19c, tenha Certeza de que tudo que
vc fizer é com a ÚLTIMA VERSÃO, mais Atualizada possível, do PL/SQL Developer
OU então (melhor) use o Oracle SQL DEVELOPER 19.x ou o sql*plus 19..x que veio
junbto com o RDBMS Oracle 19c....
Abraços,
Chiappa
Em sexta-feira, 15 de maio de 2020 19:16:32 BRT, Jose Laurindo Chiappa
<[email protected]> escreveu:
Blz ? Então, primeira coisa até onde sei no Oracle 11g ** absolutamente Não
Existia ** um datatype nativo para JSON, vide
https://asktom.oracle.com/pls/apex/asktom.search?tag=converting-json-data-into-oracle-11g
.... Pra começarmos a entender a sua situação, plz nos explique QUAL datatype
vc usou realmente nas tabelas 11g (provavelmente deve ter sido CLOB, já que um
JSON nada mais é do que um texto), e COMO vc fazia a conversão/validação para
JSON (no 11g provavelmente vc devia estar usando as packages do APEX,
imagino)...
Abraços,
Chiappa
Em sexta-feira, 15 de maio de 2020 14:39:44 BRT, Tiago de Assis Pimenta
[email protected] [oracle_br] <[email protected]> escreveu:
Pessoal, boa tarde, tudo bem ???
Na empresa que trabalho, estamos com esse projeto de migrar o database da
versão 11.2.0.4.0 para 19.0.0.0.0, porém, estamos com alguns objetos inválidos,
acredito eu, por causa do type JSON, que no 11 não era nativo e se não me
engano, a partir da versão 12, já é nativo.
Dei uma olhada em alguns docs da Oracle sobre a migração do database, mas
nenhum ainda que eu vi, fala sobre as diferenças entre o JSON do 11g para o 19c
Alguém passou por isso ? Ou que possa me passar o caminho das pedras ?
- Dados do Ambiente -
SO Desenvolvimento: Windows 10 64bitsPL/SQL Developer: 14.0.0.1961 (64 bit)
Banco: Connected to Oracle Database 19c EE Extreme Perf Release 19.0.0.0.0
- Um dos Vários Erros -
Compilation errors for TYPE BODY BASE.JSON
Error: PLS-00103: Encountered the symbol "." when expecting one of the
following:
(
Line: 80
Text: insert_value json_value := nvl(pair_value, json_value......makenull);
Obrigado.