quinta-feira, 12 de setembro de 2013

Identificando a base dados em uma rotina PL/SQL

Olá Galera!

Quem já não teve situações de ter criado rotinas no Oracle para executar um determinado procedimento, porém quando você sobe uma base de Homologação essas rotinas são executadas sem necessidade? Pois é, tive esse problema com uma rotina de envio de e-mail, onde era enviado e-mail para um grupo de pessoas toda vez que a rotina era executada durante a realização de testes em base de Homologação.

Para resolver o problema foi simples, existe a view v$databasenativa do Oracle , onde na coluna name retorna o nome do banco de dados.

Para facilitar a validação da base de dados, criei um function onde eu a implementei no inicio da minha rotina.

Abaixo segue o script para criação da function e um exemplo de como pode ser feito a validação para execução da rotina criada na base de dados desejada.

Script Function:


Exemplo da validação:

Sei que muitos devem achar muito besta o que postei, mais hoje é um dos cuidados que tenho sempre que vou desenvolver uma nova rotina, assim não precisando toda vez ficar desabilitando a rotina ou jobs no Oracle.

Obrigado!


quarta-feira, 4 de setembro de 2013

Function Oracle para retornar as iniciais de um nome

Olá Galera, esses dias tive a necessidade de criar uma function no Oracle que me retornasse as iniciais de um nome, não cheguei a pesquisar para saber se já existia algo parecido e também não sei se o jeito que fiz é realmente o jeito mais fácil, porem achei que ficou bem simples!!


CREATE OR REPLACE FUNCTION OBTER_INICIAIS(P_NOME VARCHAR2)
RETURN VARCHAR2
IS
W_QT_INICIAIS NUMBER(2);
W_POSICAO NUMBER(2);
W_INICIAIS VARCHAR2(10);
BEGIN

W_QT_INICIAIS := LENGTH(P_NOME) - LENGTH(REPLACE(P_NOME,' ',''));
W_INICIAIS := SUBSTR(P_NOME,1,1);
W_POSICAO := 1;

WHILE W_QT_INICIAIS >= W_POSICAO
  LOOP      
    W_INICIAIS := W_INICIAIS||SUBSTR(P_NOME,INSTR(P_NOME,' ',1,W_POSICAO)+1,1);
    W_POSICAO := W_POSICAO +1;                
  END LOOP;


RETURN UPPER(W_INICIAIS);

END;
/

Explicando alguns trechos do código:

1) Identifico a quantidade de espaços existentes no nome, sendo a Quantidade de Caracteres menos(-) a quantidade de caracteres sem os espaços:


W_QT_INICIAIS := LENGTH(P_NOME) - LENGTH(REPLACE(P_NOME,' ',''));


2) Atribui na variável a primeira letra do nome como sendo a minha primeira inicial:


W_INICIAIS := SUBSTR(P_NOME,1,1);


3) Identifico a próxima letra inicial do nome. Nesse caso utilizei duas Funções nativa do Oracle, a função INSTR(Utilizei para identificar a posição dos espaços em branco) e SUBSTR(Utilizei para selecionar o próximo caracter após o espaço em branco):


 W_INICIAIS := W_INICIAIS||SUBSTR(P_NOME,INSTR(P_NOME,' ',1,W_POSICAO)+1,1);


Testando a function:


terça-feira, 23 de julho de 2013

Executar através do SQL Server Procedures do Oracle que possuem parâmetros de saída

Olá Galera, hoje vou demonstrar como executar através do SQL Server  procedures do Oracle que possuem parâmetros de saída, para ilustrar o funcionamento, vou pegar os valores que retornarem na procedure do Oracle e inserir em uma tabela dentro do SQL Server.

Ilustrando a necessidade: Tenho um Sistema de Informação rodando em Banco de Dados Oracle que possui todas as informações de Agendamentos de Consultas de Pacientes. Porem preciso cruzar essas informações com outro sistema rodando em SQL Server.

Para isso, no Banco de Dados Oracle foi disponibilizado uma Package que possui a procedure Proxima_Agenda_Paciente, que é composta por um parâmetro de entrada(in) que seria o ID do paciente e 3 parâmetro de Saida(out),  que seria a  data da próxima consulta do paciente, classificação da agenda e especialidade da agenda.

Essa procedure deve ser executada utilizando Linked Server, para isso o mesmo deve estar configurado no SQL Server. Como configurar Linked Server

Para demonstrar a procedure funcionando, criei a tabela abaixo que receberá os valores retornado na procedure do banco de dados Oracle:




Abaixo o código utilizado para executar a procedure e alimentar a tabela.

1º) Populei um cursor com os IDs de pacientes para que eu possa passar como parâmetro de entrada na Procedure.

2º) Após, fui executando a procedure com cada ID de Paciente do cursor e inserindo os valores retornados pela procedure do Oracle na tabela Proxima_Agenda_Paciente, no SQL Server.

Código:
Declare
Cursor01 Cursor For
Select Rghc From Openquery(Tasyhom, 'Select Pf.Nr_Prontuario||Pf.Nr_Pront_Dv Rghc
                                                                   From Pessoa_Fisica Pf
                                                                       Inner Join Agenda_Consulta Ac
                                                                          On Pf.Cd_Pessoa_Fisica = Ac.Cd_Pessoa_Fisica
                                                                    Where
                                                                           Dt_Agenda > Sysdate
                                                                    And Rownum < 200');
Declare
@Rghc Varchar(10),
@W_Data Varchar(200),
@W_Classificacao Varchar(40),
@W_Especialidade Varchar(100);

Begin
   Open Cursor01
       Fetch Next From Cursor01 Into @Rghc
   While @@Fetch_Status = 0
       Begin
           Set @W_Data = ''
           Set @W_Classificacao = ''
           Set @W_Especialidade = ''
           Execute ( 'begin tasy.Pkg_Dados_Tasy_Icesp.Proxima_Agenda_Paciente(?,?,?,?); end;',
@Rghc, @W_Data Output, @W_Classificacao Output, @W_Especialidade Output) At Tasy;

Insert Into Proxima_Agenda_Paciente(Rghc, Data, Classificacao, Especialidade )
 Values(@Rghc, @W_Data,@W_Classificacao, @W_Especialidade )      

           Fetch Next From Cursor01 Into @Rghc;
       End;
Deallocate Cursor01;
End;


Consultando a Tabela no SQL Server:

Obrigado!!

terça-feira, 29 de janeiro de 2013

Linked Server (SQL Server x Oracle)

Olá galera, tive a experiência de realizar a comunicação do SQL Server (2005/2008) com o Oracle.
Foi uma experiência tranquila, porém tive um pouco de dificuldade de encontrar algum material em português.
Todos os exemplos que encontrei diziam que era necessário a criação de um Data Source em Fonte de Dados ODBC para realização da conexão com o Oracle. Mentira!!! não é necessário! O próprio SQL Server faz esse tipo de conexão.
Assim, estarei demonstrando as duas formas de fazer, não utilizando ODBC e utilizando ODBC quando for necessário realizar a comunicação com outros Banco de Dados.

Configuração sem utilização de Fonte de Dados ODBC:

1º Passo: Instalar o Oracle Client no servidor, instalar o pacote Administrador, assim será instalado junto o driver e arquivos para conexão. (Realizado teste com Oracle Client 10g e Oracle Client 11g).

2º Passo: Através do SQL Management Studio, clicar com o botão direito do mouse sobre o Server Objects, e selecionar a opção New Linked Server.

3º Passo:  Configuração do Linked Server.
Linked server: Nome qualquer para o Linked que será criado, este nome sera utilizado para fazer a referência durante a consulta de objetos em Banco de Dados Oracle.
Provider: Escolher "Microsoft OLE DB Provider for Oracle", para que seja realizada a conexão direta, sem utilizar ODBC.  
Produto name: Informar o produto, qual o Banco de Dados.
Data Source: Deve-se informar o nome do Serviço, lembrando que deve-se configurar o TNSNAMES.ora, arquivo de configuração para acesso ao bando de dados Oracle.

 4º Passo: Clicar em Security para que possamos informar o usuário e senha para conexão com o banco de dados Oracle.
Selecionar a opção: Be made using this security context. Informar o usuário e senha do banco de dados Oracle.



5º  Passo: Testar o Linked Server:




Configuração utilizando Fonte de Dados ODBC:

Foi utilizado a conexão ODBC para conectar com o Oracle somente como exemplo, com esta funcionalidade é possível realizar a conexão com diversos banco de dados.

1º Passo: Instalar o Oracle Client no servidor, instalar o pacote Administrador, assim será instalado junto o driver e arquivos para conexão. (Realizado teste com Oracle Client 10g e Oracle Client 11g) ou instalar banco de dados desejado e os driver de conexão ODBC do banco de dados em questão..

2º Passo: Configurar o Data Source ODBC:

2.A: Escolher o Driver Oracle em OraClient10g_home1

2.B:
Data Source Name: Informar um nome para a Conexão.
Description: Algum tipo de informação do bando de dados.
TNS Service Name: Escolher o servidor Oracle, lembrando que deve-se configurar o TNSNAMES.ora, arquivo de configuração para acesso ao bando de dados Oracle.
User ID: Usuario do banco de dados Oracle.
2.C: Testar a Conexão:



3º Passo: Através do SQL Management Studio, clicar com o botão direito do mouse sobre o Server Objects, e selecionar a opção New Linked Server.


4º Passo:  Configuração do Linked Server.
Linked server: Nome qualquer para o Linked que será criado, este nome sera utilizado para fazer a referência durante a consulta de objetos em Banco de Dados Oracle.
Provider: Escolher "Microsoft OLE DB Provider for ODBC Drivers"
Produto name: Informar o produto, qual o Banco de Dados.
Data Source: Deve-se informar o nome do Data Sourse criado em Fonte de Dados ODBC.

5º Passo: Clicar em Security para que possamos informar o usuário e senha para conexão com o banco de dados Oracle.
Selecionar a opção: Be made using this security context. Informar o usuário e senha do banco de dados Oracle.




6º Passo: Testar o Linked Server:



Obrigado!!!

sábado, 26 de janeiro de 2013

Perfil Profissional

Bacharel em Ciência da Computação - Universidade Paulista - UNIP, 2011.
Certificações: Oracle Database SQL Certified Expert,  ITIL Foundation e Microsoft Certified Professional.

Atuando há seis anos na área de Tecnologia da Informação, tenho experiência em análise e desenvolvimento de sistemas nos segmentos Empresarial e Hospitalar, este último atuando a mais de cinco anos. Dedico-me em adquirir o máximo de conhecimento em regras de negócios, processos hospitalares e em tecnologias da área que contribuem para meu crescimento profissional.

Atuo na implantação do Sistema de Gestão Hospitalar TASY da Philips Clinical Informatics, onde tenho vasto conhecimento nos módulos de Suprimentos (Almoxarifado, Compras, Estoque, Farmácia) , Assistenciais (Prontuário Eletrônico, Prescrição Eletrônica, Centro Cirúrgico), Atendimento (Agenda, Recepção, Internação, Visitas), Faturamento (SUS AIH, SUS BPA, SUS APAC), Certificação Digital, Desenvolvimento de Templates (Electronic Health Records) e integrações com equipamentos e sistemas de informações.

Vivencia em análise e desenvolvimentos de rotinas em Oracle PL/SQL de alta complexidade, no qual me diferencia na atuação de suporte, análise de bugs, realização de teste unitário e integrado, além da facilidade de identificar as regras de negócios aplicadas ao sistema TASY da Philips Clinical Informatics.

Possuo três certificações, Oracle Database SQL Expert Certified, ITIL Fundation e Microsoft Certified Professional em Windows Server 2003, e tenho como objetivo conquistar a Oracle PL/SQL Developer Certified Professional.

Como Freelancer realizo projetos de desenvolvimentos de sistemas, atuando no levantamento de requisitos, elaboração de casos de uso, modelagem de banco de dados, e no desenvolvimento de aplicações utilizando as tecnologias Java, Delphi, banco de dados SQL Server, Oracle e MySQL. Também realizo projetos que envolvem programação de microcontroladores de plataforma Arduíno.

Sou organizado, responsável, auto-exigente e possuo bom relacionamento.

Experiência Atual
Função: Analista de Sistemas Sênior
Empresa: Instituto do Câncer do Estado de São Paulo(ICESP)
Responsabilidades: Responsável pela implantação do sistema de gestão hospitalar TASY da Philips Clinical Informatics nos módulos de Suprimentos (Almoxarifado, Compras, Estoque, Farmácia),  Assistenciais (Prontuário Eletrônico, Prescrição Eletrônica, Centro Cirúrgico), Atendimento (Agenda, Recepção, Internação, Visitas), Faturamento (SUS AIH, SUS BPA, SUS APAC); Levantamentos de processo para implantação de novos módulos do sistema; Desenvolvimento de Templates (Electronic Health Records); Desenvolvimento e manutenção de Relatórios de alta complexidade; Desenvolvimento de views, procedures, triggers e functions em base de dados Oracle; Desenvolvimento de scripts de manipulação de dados; Carga de dados; Extração de dados; Integração de sistemas; Análise de bugs; Teste de versão; Documentações; Treinamento a usuários.