domingo, 12 de junho de 2011

COLOCANDO GRANT PARA TODO O SCHEMA EM PL/SQL

Esse post mostra como colocar GRANT(permissão) para todo um SCHEMA em PL/SQL. O código abaixo cloca as permissões dentro do schema CONQUISTAR para o usuário RAFAEL.


DECLARE
CURSOR C1 IS select table_NAME from all_tables where owner like 'CONQUISTAR';
TABELA  VARCHAR2(200);
CMDSQL  VARCHAR2(1000);
BEGIN
OPEN C1;
LOOP
    FETCH C1 INTO TABELA;
    CMDSQL:='GRANT ALL ON CONQUISTAR.'||TABELA||' TO RAFAEL';
    --DBMS_OUTPUT.PUT_LINE(CMDSQL);
    EXECUTE IMMEDIATE CMDSQL;
    EXIT WHEN C1%NOTFOUND;
END LOOP;
CLOSE C1;
END;

segunda-feira, 28 de fevereiro de 2011

Usando SPLIT em PLSQL

Nesse artigo pretendo mostrar como contornei um grande problema em plsql, a ausência da função SPLIT. Muito comum em varias linguagens como java ou php, a função SPLIT consiste em quebrar a String alvo em substrings com um separador. Segue exemplo de como funciona a função em java.




Segue a função que resolve o problema. Nela passamos a String que queremos separar, o caractere separador e a posição que queremos retornar.
/*
Função para retornar o segmento.
*/
create or replace function splitstr( nome varchar2
                                                 , separador varchar2
                                                 , posicao number
                                                ) return varchar2 is
       begin
                if posicao<=1 then 

                      return substr(nome,0,instr(nome,separador)-1); 
                  else 
                      return splitstr(substr(nome,instr(nome,separador)+1),separador,posicao-1); 
                 end if; 
         end splitstr;



Abaixo exemplo de chamada:


No exemplo acima exibimos o campo e em seguinda os subcampos 1,2 e 4.

quarta-feira, 23 de fevereiro de 2011

Tansformando ResultSet em Array de Strings

Transformando ResultSet em Array de String

Nesse artigo pretendo mostrar na pratica como converter um objeto do tipo ResultSet para um Array de String. É uma função simples que pode ser útil usada junto com componente Swing como JTable. Segue os passos.
1. Declarar objetos header e body quer serão usados para armazenar de forma temporária os resultados.
2. Consultar as informações no banco de dados obtendo como retorno um objeto ResultSet.
3. Passar as informações do ResultSet para o Array de String.
4. Retornar para o método chamador o Array.




/*
* SITE :http://javaex.criarumblog.com
* AUTOR :Rafael Bezerra Cavalcante
* DATA : 20/02/2011
*
* Esse matérial pode ser copiado e distribuido a vontade.
*/

package banco;
import java.sql.*;

public class Oracle {
/*
* No Exemplo, segue os dados do banco:
* HOST : localhost
* PORTA : 1521
* BANCO : XE
*
* USUARIO :usuario
* SENHA :senhaDoBanco
*/
private Connection minhaConexao ;
private String host = "localhost" ;
private String porta = "1521" ;
private String sid = "XE" ;
private String usuario = "usuario" ;
private String senha = "senhaDoBanco" ;
private String header[] ;
private String body[][] ;
public boolean erro ;
public String erroMsg ;

public void conectar()throws ClassNotFoundException, SQLException{
Class.forName("oracle.jdbc.driver.OracleDriver");
minhaConexao =DriverManager.getConnection("jdbc:oracle:thin:@"+host+":"+porta+":"+sid,usuario,senha);
}

public void fechar() throws SQLException{
this.minhaConexao.close();
}


/*
Essa função faz a carga dos objeto da classe header e body.
*/
public void executeQueryVoid(String sql) throws ClassNotFoundException, SQLException{
this.erro=false;
this.erroMsg="";
this.conectar();
Statement st = this.minhaConexao.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet rs = st.executeQuery(sql);
int j=0;
ResultSetMetaData metaData = rs.getMetaData();
int columns = metaData.getColumnCount();
rs.last();
int size = rs.getRow();
rs.beforeFirst();
this.header=new String[metaData.getColumnCount()];
this.body=new String[size][metaData.getColumnCount()];
while(rs.next()) {
for(int i=0;i if(j==0)
this.header[i]=metaData.getColumnName(i+1);
int tipo=metaData.getColumnType(i+1);
System.out.println(tipo);
if(tipo==2)
this.body[j][i]=""+rs.getInt(i+1);
else
this.body[j][i]=rs.getString(i+1);
}
j++;
}
this.fechar();
}

/*
* Essa função serve para retornar o array do body.
*/
public String[][] executeQueryArray(String sql){
try{
this.executeQueryVoid(sql);
return this.body;
}catch(Exception e){
this.erro=true;
this.erroMsg=e.getMessage();
return null;
}
}


}

terça-feira, 22 de fevereiro de 2011

Acessando Banco de Dados Oracle com JDBC

Nesse artigo pretendo mostrar na pratica como conectar banco Oracle com conexão JDBC padrão.
1.       Driver do Banco de Dados: Antes de executar o programa deve ser instalado o driver do banco de dados correspondente. Para o Oracle o driver pode ser encontrado no site e deve ser baixado de acordo com a versão do banco utilizado. No banco do exemplo o arquivo é o ojdbc5.jar para o Oracle 12.

2.       Codificação: Segue código exemplo de classe que acessa banco de dados. Nele uso basicamente duas funções executeQuery para executar consultas e executeUpdate para atualizações.



/*
* SITE :http://exjava.blogspot.com
* AUTOR :Rafael Bezerra Cavalcante
* DATA : 20/02/2011
*
* Esse matérial pode ser copiado e distribuido a vontade.
*/

package banco;
import java.sql.*;

public class Oracle {
/*
* No Exemplo, segue os dados do banco:
* HOST : localhost
* PORTA : 1521
* BANCO : XE
*
* USUARIO :usuario
* SENHA :senhaDoBanco
*/
private Connection minhaConexao ;
private String host = "localhost" ;
private String porta = "1521" ;
private String sid = "XE" ;
private String usuario = "usuario" ;
private String senha = "senhaDoBanco" ;

   public void conectar()throws ClassNotFoundException, SQLException{
     Class.forName("oracle.jdbc.driver.OracleDriver");
minhaConexao =DriverManager.getConnection("jdbc:oracle:thin:@"+host+":"+porta+":"+sid,usuario,senha);
  }

  public void fechar() throws SQLException{
      this.minhaConexao.close();
  }

/*
Método para consulta SELECT.
*/
   public ResultSet executeQuery(String sql) throws SQLException, ClassNotFoundException{
        this.conectar();
        Statement stmt = this.minhaConexao.createStatement();
        ResultSet rs = stmt.executeQuery(sql);
        return rs;
   }
/*
Método para INSERT, UPDATE e DELETE.
*/
  public void executeUpdate(String sql) throws ClassNotFoundException, SQLException{
        this.conectar();
        Statement stmt = this.minhaConexao.createStatement();
         stmt.executeUpdate(sql);
         this.fechar();
   }
}