Nosso ambiente atualmente é o DB2 9.7 Fix Pack 4 no AIX.
Estou no processo de projetar e codificar alguns procedimentos armazenados SQL PL responsáveis por arquivar dados em um esquema de arquivo e, em seguida, eliminar dados antigos/desnecessários do esquema principal.
Criei alguns tipos definidos pelo usuário (UDTs), especificamente tipos de linha e tipos de cursor. Estou olhando para dividir minha lógica em três procedimentos armazenados. Proc A
seria usado para limpar um determinado conjunto de dados relacionados à minha tabela EVENT principal (ou seja, o EVENT
e tudo abaixo dela). Eu realmente não quero que outros possam chamar isso. Eu só quero modularizar a lógica. Proc B
iria arquivar dados de EVENT
(e outras tabelas) que o usuário final deseja e, em seguida, chamar Proc A
para limpar os dados originais. Proc C
seria usado para procurar EVENTs
que poderia ser descartado e, em seguida, chamado Proc A
para o trabalho real.
Agora eu poderia criar tudo isso independente um do outro e, em seguida, implantá-los dessa maneira. Ou....eu poderia usar um módulo. Pelo que entendi, um módulo me permite associar funcionalidades relacionadas (tipos, procs armazenados, funções, etc.) juntos. Ele também me permite decidir quais objetos eu desejo que sejam acessíveis externamente ao módulo, ou seja, podem ser chamados/usados diretamente, versus quais podem ser chamados apenas internos ao módulo (como o caso acima, onde eu poderia ocultar objetos armazenados Proc A
, mas permitir B
e C
chamá-lo).
Isso soa incrivelmente intrigante. Mas também tem suas desvantagens. Acho que não faz parte de nenhum padrão SQL, mas algo específico do IBM DB2. Mesmo assim, você não pode interagir diretamente com os módulos via Data Studio ou Control Center (além CALL
dos procedimentos/funções de face externa). E também não é possível criá-los diretamente no InfoSphere Data Architect da IBM. Então eu teria que manter os DDL's de forma independente.
Portanto, o conceito de módulo parece útil. Posso esconder algumas coisas e escolher o que pode ser chamado para garantir que alguém não faça mau uso de nada.
Mas, dado que não parece ser suportado por ferramentas IBM fora da linha de comando .... Eu estava pensando .... quem usa módulos (especificamente no DB2 LUW)? Alguém? Faz sentido? Caso contrário, existe outra maneira de realizar meu pensamento de modularizar o código enquanto torna os "módulos" inacessíveis para chamadas diretas?
Não poderei responder a todas as suas perguntas, mas vale o que vale:
Utilizo módulos em dois projetos que desenvolvi. Com módulos, consigo organizar o código com mais facilidade, e esconder rotinas dos usuários. Além disso, os módulos fornecem uma maneira de ter um nome padrão para o módulo e o esquema fornece a versão ( https://www.ibm.com/developerworks/community/blogs/SQLTips4DB2LUW/entry/appupgrade?lang=en_us )
Outra grande vantagem dos módulos é a flexibilidade de criar funções recursivas.