sexta-feira, 17 de agosto de 2012

ETL PARA O ANDROID e APRESENTAÇÃO DAS INFORMAÇÕES


Foi usado esse código para a extração das informações que serão apresentadas na aplicação android.

A aplicação ira fazer uma solicitação ao servidor web PHP, que respondera por meio do JSON, o resultado   é a apresentação da lista dos itens carregados no celular.

________________________________________________________________________________

> LaudoActivity.java

package com.rober.clinica_laudo;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.json.JSONArray;
import org.json.JSONObject;

import com.rober.clinica_laudo.R;

import android.R.string;
import android.annotation.SuppressLint;
import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class LaudoActivity extends ListActivity {
//ListAdapter adapter;
LaudoAdapter adapter;
DBAdapter datasource;
Button btNovoContacto;
Button btBuscarServer;
TextView textRober;
private List<Laudo> laudoList = new ArrayList<Laudo>();

ListView listView;

// comunicação server
private static final int TIMEOUT_MILLISEC = 0;

@Override
public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.main);

listView = (ListView) findViewById(R.id.linearLayout1);

datasource = new DBAdapter(this);
datasource.open();
Cursor cursor = datasource.getLaudos();

for (int i = 0; i < cursor.getCount(); i++) {
cursor.moveToPosition(i);
Laudo laudo = new Laudo(cursor.getLong(0), cursor.getLong(1),
cursor.getString(2), cursor.getString(3),
cursor.getString(4), cursor.getString(5),
cursor.getString(6));
laudoList.add(laudo);
}

setListAdapter(new LaudoAdapter(this, laudoList));
datasource.close();

btBuscarServer = (Button) findViewById(R.id.btBuscarServer);

btBuscarServer.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub

String max_cod = "";

datasource.open();
Cursor cursor = datasource.getMaxLaudo();

for (int i = 0; i < cursor.getCount(); i++) {
cursor.moveToPosition(i);
Log.i("MAX", "max - " + cursor.getString(0));
if (cursor.getString(0) != null) {

max_cod = cursor.getString(0);

} else {
max_cod = "0";
}
}

datasource.close();

HttpAsyncTask asyncTask = new HttpAsyncTask(max_cod);
asyncTask.execute();

// asyncTask.cancel(true);
}
});
}

@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();

}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
}

private class HttpAsyncTask extends AsyncTask<String, Integer, ArrayList> {

String max_cod;

public HttpAsyncTask(String max_cod) {
// TODO Auto-generated constructor stub
this.max_cod = max_cod;
}

@Override
protected ArrayList doInBackground(String... max_cod) {
try {

HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams,
TIMEOUT_MILLISEC);
HttpConnectionParams.setSoTimeout(httpParams, TIMEOUT_MILLISEC);
//
HttpParams p = new BasicHttpParams();

p.setParameter("user", "1");
// Instantiate an HttpClient
HttpClient httpclient = new DefaultHttpClient(p);
String url = "http://10.0.2.2:80/clinica/"
+ "clinica.php?max_cod=" + this.max_cod
+ "&user=1&format=json";
HttpPost httppost = new HttpPost(url);

// Instantiate a GET HTTP method
try {
Log.i(getClass().getSimpleName(), "send  task - start");
//
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
2);
nameValuePairs.add(new BasicNameValuePair("user", "1"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
ResponseHandler<String> responseHandler = new BasicResponseHandler();

Log.i(getClass().getSimpleName(), "funcionou ate");
String responseBody = httpclient.execute(httppost,
responseHandler);
Log.d("TESTE", responseBody);

// Parse
JSONObject json = new JSONObject(responseBody);
JSONArray jArray = json.getJSONArray("posts");
ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();

for (int i = 0; i < jArray.length(); i++) {
HashMap<String, String> map = new HashMap<String, String>();
JSONObject e = jArray.getJSONObject(i);
String s = e.getString("post");
JSONObject jObject = new JSONObject(s);

map.put("codigo",
jObject.getString("clin_func_empr_exam_codigo"));
map.put("medico", jObject.getString("medi_nome"));
map.put("func", jObject.getString("func_empr_nome"));
map.put("exame", jObject.getString("exam_nome"));
map.put("data", jObject
.getString("clin_func_empr_exam_data_exame"));
map.put("valor",
jObject.getString("clin_func_empr_exam_valor"));

mylist.add(map);
}

datasource.open();
HashMap<String, String> map_2 = new HashMap<String, String>();
for (Iterator<HashMap<String, String>> it = mylist
.iterator(); it.hasNext();) {
map_2 = it.next();
datasource.createLaudo(map_2.get("codigo"),
map_2.get("medico"), map_2.get("func"),
map_2.get("exame"), map_2.get("data"),
map_2.get("valor"));
}
datasource.close();

return mylist;

} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

} catch (Throwable t) {
Log.i("Contactos", t.getMessage());
}

return null;
}

@Override
protected void onProgressUpdate(Integer... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
}

@SuppressLint("ParserError")
@Override
protected void onPostExecute(ArrayList result) {
// TODO Auto-generated method stub

super.onPostExecute(result);
laudoList.clear();

datasource.open();
Cursor cursor = datasource.getLaudos();

for (int i = 0; i < cursor.getCount(); i++) {
cursor.moveToPosition(i);
Laudo contacto = new Laudo(cursor.getLong(0),
cursor.getLong(1), cursor.getString(2),
cursor.getString(3), cursor.getString(4),
cursor.getString(5), cursor.getString(6));
laudoList.add(contacto);
}

adapter = new LaudoAdapter(LaudoActivity.this, laudoList);
setListAdapter(adapter);
adapter.notifyDataSetChanged();
datasource.close();

}

}

}

/*******************************************************************************/

> DbHelper.java

Classe responsável pela conexão com o banco sqllite. 

package com.rober.clinica_laudo;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DbHelper extends SQLiteOpenHelper {

private static final int DATABASE_VERSION = 1;
public static final String TABLE_NAME = "exames";
private static final String DATABASE_NAME = " clinica_laudo.db";

public static final String ID = "id";
public static final String CODIGO = "clin_func_empr_exam_codigo";
public static final String MEDICO = "medi_nome";
public static final String FUNCIONARIO = "func_empr_nome";
public static final String EXAME = "exam_nome";
public static final String DATA = "clin_func_empr_exam_data_exame";
public static final String VALOR = "clin_func_empr_exam_valor";
private static final String DATABASE_CREATE = "create table "
+ TABLE_NAME + "( " + ID
+ " integer primary key autoincrement, " + CODIGO
+ " integer not null, " + MEDICO
+ " text not null, " + FUNCIONARIO 
+ " text not null, " + EXAME 
+ " text not null, " + DATA  
+ " text not null, " + VALOR 
+ " text not null);";
public DbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
//super()
}

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DATABASE_CREATE);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(DbHelper.class.getName(), "Upgrading database from version " + oldVersion + " to " + newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}


}

/********************************************************************************/

> DBAdapter.java

package com.rober.clinica_laudo;

import java.io.ByteArrayOutputStream;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

public class DBAdapter {
private SQLiteDatabase database;
private DbHelper dbHelper;
private String[] allColumns = { dbHelper.ID, dbHelper.CODIGO,
dbHelper.MEDICO, dbHelper.FUNCIONARIO, dbHelper.EXAME,
dbHelper.DATA, dbHelper.VALOR };

public DBAdapter(Context context) {
dbHelper = new DbHelper(context);
}

public void open() throws SQLException {
database = dbHelper.getWritableDatabase();
}

public void close() {
dbHelper.close();
}

public Void createLaudo(String codigo, String medico, String func,
String exame, String data, String valor) {
ContentValues values = new ContentValues();
values.put(dbHelper.CODIGO, codigo);
values.put(dbHelper.MEDICO, medico);
values.put(dbHelper.FUNCIONARIO, func);
values.put(dbHelper.EXAME, exame);
values.put(dbHelper.DATA, data);
values.put(dbHelper.VALOR, valor);

long insertId = database.insert(dbHelper.TABLE_NAME, null, values);
// To show how to query
Cursor cursor = database.query(dbHelper.TABLE_NAME, allColumns,
dbHelper.ID + " = " + insertId, null, null, null, null);
cursor.moveToFirst();
return null;
}


private Laudo cursorToLaudo(Cursor cursor) {
Laudo laudo = new Laudo(cursor.getLong(0),
cursor.getLong(1), cursor.getString(2), cursor.getString(3),
cursor.getString(4), cursor.getString(5), cursor.getString(6));
return laudo;
}

public Cursor getLaudos() {
Cursor cursor = database.rawQuery("select " + dbHelper.ID + ", "
+ dbHelper.CODIGO + ", " + dbHelper.MEDICO + ", "
+ dbHelper.FUNCIONARIO + ", " + dbHelper.EXAME + ", "
+ dbHelper.DATA + ", " + dbHelper.VALOR + " from exames ORDER BY " + dbHelper.CODIGO + " desc", null);
return cursor;
}

public Laudo getLaudo(int idLaudo) {
Cursor cursor = database.query(dbHelper.TABLE_NAME, allColumns,
dbHelper.CODIGO + " = " + idLaudo, null, null, null, null);
cursor.moveToFirst();
return cursorToLaudo(cursor);
}

public Cursor getMaxLaudo() {
Cursor cursor = database.rawQuery("select MAX(" + dbHelper.CODIGO
+ ") " + " from exames", null);
return cursor;
}

}

/*******************************************************************************/

> Laudo.java

package com.rober.clinica_laudo;


public class Laudo {
private long id;
private long clin_func_empr_exam_codigo;
private String medi_nome;
private String func_empr_nome;
private String exam_nome;
private String clin_func_empr_exam_data_exame;
private String clin_func_empr_exam_valor;
public Laudo(long id, long codigo, String medico, String func,String exame,String data,String valor){
this.id=id;
this.clin_func_empr_exam_codigo=codigo;
this.medi_nome=medico;
this.func_empr_nome=func;
this.exam_nome=exame;
this.clin_func_empr_exam_data_exame=data;
this.clin_func_empr_exam_valor=valor;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}


public long getClin_func_empr_exam_codigo() {
return clin_func_empr_exam_codigo;
}

public void setClin_func_empr_exam_codigo(long clin_func_empr_exam_codigo) {
this.clin_func_empr_exam_codigo = clin_func_empr_exam_codigo;
}

public String getMedi_nome() {
return medi_nome;
}

public void setMedi_nome(String medi_nome) {
this.medi_nome = medi_nome;
}

public String getFunc_empr_nome() {
return func_empr_nome;
}

public void setFunc_empr_nome(String func_empr_nome) {
this.func_empr_nome = func_empr_nome;
}

public String getExam_nome() {
return exam_nome;
}

public void setExam_nome(String exam_nome) {
this.exam_nome = exam_nome;
}

public String getClin_func_empr_exam_data_exame() {
return clin_func_empr_exam_data_exame;
}

public void setClin_func_empr_exam_data_exame(
String clin_func_empr_exam_data_exame) {
this.clin_func_empr_exam_data_exame = clin_func_empr_exam_data_exame;
}

public String getClin_func_empr_exam_valor() {
return clin_func_empr_exam_valor;
}

public void setClin_func_empr_exam_valor(String clin_func_empr_exam_valor) {
this.clin_func_empr_exam_valor = clin_func_empr_exam_valor;
}

}

/*******************************************************************************/

> LaudoAdapter.java

package com.rober.clinica_laudo;

import java.util.List;

import com.rober.clinica_laudo.R;

import android.annotation.SuppressLint;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class LaudoAdapter extends BaseAdapter {
private Context context;
private List<Laudo> laudoList;

public LaudoAdapter(Context context, List<Laudo> laudoList) {
this.context = context;
this.laudoList = laudoList;
}

public int getCount() {
return laudoList.size();
}

public Object getItem(int position) {
return laudoList.get(position);
}

public long getItemId(int position) {
return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
// Recupera o estado da posição atual
Laudo laudo = laudoList.get(position);

// Cria uma instância do layout XML para os objetos correspondentes
// na View
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.laudo_list_item, null);

// Estado - Abreviação
TextView textState = (TextView) view.findViewById(R.id.dado_1);
textState.setText(laudo.getClin_func_empr_exam_codigo() + " - "
+ laudo.getFunc_empr_nome() + " - " + laudo.getExam_nome());

// Capital
TextView textCapital = (TextView) view.findViewById(R.id.dado_2);
textCapital.setText(laudo.getClin_func_empr_exam_valor() + " ("
+ laudo.getClin_func_empr_exam_data_exame() + ")");

Log.i("CoNT",
"ID - " + laudo.getId() + " / "
+ laudo.getClin_func_empr_exam_codigo());

return view;
}

}

/********************************************************************************/

> LaudoDetalhes.java

package com.rober.clinica_laudo;

import com.rober.clinica_laudo.R;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

public class LaudoDetalhes extends Activity {

int idLaudo;
DBAdapter datasource;
Laudo laudo;
TextView edtNome;
TextView edtEmail;
TextView edtTelefone;
Button btVoltar;
Button btEliminar;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.detalhelaudo);

edtNome = (TextView) findViewById(R.lista.txtnome);
edtEmail = (TextView) findViewById(R.lista.txtEmail);
edtTelefone = (TextView) findViewById(R.lista.txtTelefone);
btEliminar = (Button) findViewById(R.id.btEliminar);
btVoltar = (Button) findViewById(R.lista.btmenu);

carregaDetalhesContacto();

btVoltar.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
finish();
}
});

}

private void carregaDetalhesContacto() {
idLaudo = getIntent().getIntExtra("idLaudo", 0);

datasource = new DBAdapter(this);
datasource.open();
laudo = datasource.getLaudo(idLaudo);
datasource.close();

/*
* ivFoto.setImageBitmap(contacto.getFoto());
* edtNome.setText(contacto.getNome());
* edtEmail.setText(contacto.getEmail());
* edtTelefone.setText(contacto.getTelefone());
*/
}

}

terça-feira, 14 de agosto de 2012

Cubo

Este é o código em xml para a geração do cubo no StarSchema.

_______________________________________________________________________________

- <Schema name="tebd_clinica_etl">
- <Cube name="clinica" visible="true" cache="true" enabled="true">
  <Table name="clin_func_empr_exames" schema="tebd_clinica_etl" />
- <Dimension type="StandardDimension" visible="true" foreignKey="clin_func_empr_exam_fk_exames" highCardinality="false" name="Exames">
- <Hierarchy name="Exames" visible="true" hasAll="true" primaryKey="exam_codigo" primaryKeyTable="clin_exames">
  <Table name="clin_exames" schema="tebd_clinica_etl" />
  <Level name="TipoExame" visible="true" table="clin_exames" column="exam_nome" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never" />
  </Hierarchy>
  </Dimension>
- <Dimension type="StandardDimension" visible="true" foreignKey="clin_func_empr_exam_fk_medico" highCardinality="false" name="Medico">
- <Hierarchy name="Medico" visible="true" hasAll="true" primaryKey="medi_codigo" primaryKeyTable="clin_medico">
  <Table name="clin_medico" schema="tebd_clinica_etl" />
  <Level name="Especialidade" visible="true" table="clin_medico" column="medi_especialidade" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never" />
  <Level name="NomeMedico" visible="true" table="clin_medico" column="medi_nome" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never" />
  <Level name="CRM" visible="true" table="clin_medico" column="medi_crm" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never" />
  </Hierarchy>
  </Dimension>
- <Dimension type="StandardDimension" visible="true" foreignKey="clin_func_empr_exam_fk_tempo_exame" highCardinality="false" name="TempoExame">
- <Hierarchy name="TempoExame" visible="true" hasAll="true" primaryKey="temp_exam_codigo" primaryKeyTable="clin_tempo_exame">
  <Table name="clin_tempo_exame" schema="tebd_clinica_etl" />
  <Level name="AnoExame" visible="true" table="clin_tempo_exame" column="temp_exam_ano" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never" />
  <Level name="MesExame" visible="true" table="clin_tempo_exame" column="temp_exam_mes" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never" />
  <Level name="DiaExame" visible="true" table="clin_tempo_exame" column="temp_exam_dia" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never" />
  </Hierarchy>
  </Dimension>
  <Measure name="Qtd" column="clin_func_empr_exam_qtd" aggregator="sum" visible="true" />
  </Cube>
  </Schema>

sexta-feira, 3 de agosto de 2012

ETL

O código ETL foi feito em php.
Para agilizar o processo de extração, foi necessário a retirada dos índices das tabelas. O índices são funcionais para buscas, mas podem dificultar quando são necessárias numerosas inserções.
O tempo total do processo foi e 24 horas e foram feitos blocos de 10000 linhas para ser dado o "commit"

_______________________________________________________________________________

<?php

class Clinica extends Conexao {
   
    private $bloco = 10000;
        public function ETLMedico() {
        $conexao = new Conexao();
        $totalMedicos = $conexao->executeSQLBancoReal("SELECT count(*) as total FROM clin_medico");
        $total = mysql_fetch_array($totalMedicos);
        if ($total["total"] < $this->bloco){
            $inicio = 0;
            $final = $total["total"];
        }else{
            $inicio = 0;
            $final = $this->bloco;
        }
        while ($total["total"] >= $final){
            $resultado = $conexao->executeSQLBancoReal("SELECT medi_nome, medi_crm, medi_especialidade, medi_ativo FROM clin_medico");
            $inserir = "INSERT INTO clin_medico (medi_nome, medi_crm, medi_especialidade, medi_ativo) VALUES ";
            $max = 0;
            while ($rows = mysql_fetch_array($resultado)){
                if ($max < 100){
                    if ($max == 0){
                        $inserir .= "('".$rows["medi_nome"]."', '".$rows["medi_crm"]."', '".$rows["medi_especialidade"]."', '".$rows["medi_ativo"]."')";
                    }else{
                        $inserir .= ", ('".$rows["medi_nome"]."', '".$rows["medi_crm"]."', '".$rows["medi_especialidade"]."', '".$rows["medi_ativo"]."')";
                    }
                    $max++;
                }else{
                    $max = 0;
                    $inserir .= ", ('".$rows["medi_nome"]."', '".$rows["medi_crm"]."', '".$rows["medi_especialidade"]."', '".$rows["medi_ativo"]."')";
                    $result = $conexao->executeSQL($inserir);       
                    if ($result == false){
                        while ($result == false){
                            $result = $conexao->executeSQL($inserir);
                        }   
                        $conexao->executeSQL("INSERT INTO clin_auditoria (aud_descricao) VALUES ('Houve ROLLBACK na insercao da tabela clin_medico no bloco de $inicio a $final')");
                    }else{
                        $inserir = "INSERT INTO clin_medico (medi_nome, medi_crm, medi_especialidade, medi_ativo) VALUES ";
                    }
                }
            }
            $result = $conexao->executeSQL($inserir);
            if ($result == false){
                while ($result == false){
                    $result = $conexao->executeSQL($inserir);
                }   
                $conexao->executeSQL("INSERT INTO clin_auditoria (aud_descricao) VALUES ('Houve ROLLBACK na insercao da tabela clin_medico no bloco de $inicio a $final')");
            }
            if ($final == $total["total"]){
                $final++;
            }else{
                $inicio = $final;
                $final += $this->bloco;
                if ($final > $total["total"]){
                    $final = $total["total"];
                }
            }
        }
    }
   
    public function ETLExames() {
        $conexao = new Conexao();
        $totalExames = $conexao->executeSQLBancoReal("SELECT count(*) as total FROM clin_exames");
        $total = mysql_fetch_array($totalExames);
        if ($total["total"] < $this->bloco){
            $inicio = 0;
            $final = $total["total"];
        }else{
            $inicio = 0;
            $final = $this->bloco;
        }
        while ($total["total"] >= $final){
            $resultado = $conexao->executeSQLBancoReal("SELECT exam_nome, exam_ativo FROM clin_exames");
            $inserir = "INSERT INTO clin_exames (exam_nome, exam_ativo) VALUES ";
            $max = 0;
            while ($rows = mysql_fetch_array($resultado)){
                if ($max < 100){
                    if ($max == 0){
                        $inserir .= "('".$rows["exam_nome"]."', '".$rows["exam_ativo"]."')";
                    }else{
                        $inserir .= ", ('".$rows["exam_nome"]."', '".$rows["exam_ativo"]."')";
                    }
                    $max++;
                }else{
                    $max = 0;
                    $inserir .= ", ('".$rows["exam_nome"]."', '".$rows["exam_ativo"]."')";
                    $result = $conexao->executeSQL($inserir);       
                    if ($result == false){
                        while ($result == false){
                            $result = $conexao->executeSQL($inserir);
                        }
                        $conexao->executeSQL("INSERT INTO clin_auditoria (aud_descricao) VALUES ('Houve ROLLBACK na insercao da tabela clin_exames no bloco de $inicio a $final')");
                    }else{
                        $inserir = "INSERT INTO clin_exames (exam_nome, exam_ativo) VALUES ";
                    }
                }
            }
            $result = $conexao->executeSQL($inserir);
            if ($result == false){
                while ($result == false){
                    $result = $conexao->executeSQL($inserir);
                }
                $conexao->executeSQL("INSERT INTO clin_auditoria (aud_descricao) VALUES ('Houve ROLLBACK na insercao da tabela clin_exames no bloco de $inicio a $final')");
            }
            if ($final == $total["total"]){
                $final++;
            }else{
                $inicio = $final;
                $final += $this->bloco;
                if ($final > $total["total"]){
                    $final = $total["total"];
                }
            }
        }
    }
   
    public function ETLEmpresa() {
        $conexao = new Conexao();
        $totalEmpresas = $conexao->executeSQLBancoReal("SELECT count(*) as total FROM clin_empresa");
        $total = mysql_fetch_array($totalEmpresas);
        if ($total["total"] < $this->bloco){
            $inicio = 0;
            $final = $total["total"];
        }else{
            $inicio = 0;
            $final = $this->bloco;
        }
        while ($total["total"] >= $final){
            $resultado = $conexao->executeSQLBancoReal("SELECT empr_cnpj, empr_razao_social, empr_fantasia, empr_rua, empr_numero, empr_complemento, empr_bairro, empr_cidade, empr_estado, empr_pais, empr_data_cadastro, empr_ativo FROM clin_empresa");
            $inserir = "INSERT INTO clin_empresa (empr_cnpj, empr_razao_social, empr_fantasia, empr_rua, empr_numero, empr_complemento, empr_bairro, empr_cidade, empr_estado, empr_pais, empr_data_cadastro, empr_ativo) VALUES ";
            $max = 0;
            while ($rows = mysql_fetch_array($resultado)){
                if ($max < 100){
                    if ($max == 0){
                        $inserir .= "('".$rows["empr_cnpj"]."','".$rows["empr_razao_social"]."', '".$rows["empr_fantasia"]."', '".$rows["empr_rua"]."', '".$rows["empr_numero"]."', '".$rows["empr_complemento"]."', '".$rows["empr_bairro"]."', '".$rows["empr_cidade"]."', '".$rows["empr_estado"]."', '".$rows["empr_pais"]."', '".$rows["empr_data_cadastro"]."', '".$rows["empr_ativo"]."')";
                    }else{
                        $inserir .= ", ('".$rows["empr_cnpj"]."','".$rows["empr_razao_social"]."', '".$rows["empr_fantasia"]."', '".$rows["empr_rua"]."', '".$rows["empr_numero"]."', '".$rows["empr_complemento"]."', '".$rows["empr_bairro"]."', '".$rows["empr_cidade"]."', '".$rows["empr_estado"]."', '".$rows["empr_pais"]."', '".$rows["empr_data_cadastro"]."', '".$rows["empr_ativo"]."')";
                    }
                    $max++;
                }else{
                    $max = 0;
                    $inserir .= ", ('".$rows["empr_cnpj"]."','".$rows["empr_razao_social"]."', '".$rows["empr_fantasia"]."', '".$rows["empr_rua"]."', '".$rows["empr_numero"]."', '".$rows["empr_complemento"]."', '".$rows["empr_bairro"]."', '".$rows["empr_cidade"]."', '".$rows["empr_estado"]."', '".$rows["empr_pais"]."', '".$rows["empr_data_cadastro"]."', '".$rows["empr_ativo"]."')";
                    $result = $conexao->executeSQL($inserir);
                    if ($result == false){
                        while ($result == false){
                            $result = $conexao->executeSQL($inserir);
                        }   
                        $conexao->executeSQL("INSERT INTO clin_auditoria (aud_descricao) VALUES ('Houve ROLLBACK na insercao da tabela clin_empresa no bloco de $inicio a $final')");
                    }else{
                        $inserir = "INSERT INTO clin_empresa (empr_cnpj, empr_razao_social, empr_fantasia, empr_rua, empr_numero, empr_complemento, empr_bairro, empr_cidade, empr_estado, empr_pais, empr_data_cadastro, empr_ativo) VALUES ";
                    }
                }
            }
            $result = $conexao->executeSQL($inserir);
            if ($result == false){
                while ($result == false){
                    $result = $conexao->executeSQL($inserir);
                }
                $conexao->executeSQL("INSERT INTO clin_auditoria (aud_descricao) VALUES ('Houve ROLLBACK na insercao da tabela clin_empresa no bloco de $inicio a $final')");
            }
            if ($final == $total["total"]){
                $final++;
            }else{
                $inicio = $final;
                $final += $this->bloco;
                if ($final > $total["total"]){
                    $final = $total["total"];
                }
            }
        }
    }
   
    public function ETLFuncionario() {
        $conexao = new Conexao();
        $resultado = $conexao->executeSQLBancoReal("SELECT func_empr_fk_empresa, func_empr_nome, func_empr_rg, func_empr_cpf, func_empr_rua, func_empr_numero, func_empr_complemento, func_empr_bairro, func_empr_cidade, func_empr_estado, func_empr_pais, func_empr_data_cadastro, func_empr_ativo FROM clin_funcionario_empresa");
        $inserir = "INSERT INTO clin_funcionario_empresa (func_empr_fk_empresa, func_empr_nome, func_empr_rg, func_empr_cpf, func_empr_rua, func_empr_numero, func_empr_complemento, func_empr_bairro, func_empr_cidade, func_empr_estado, func_empr_pais, func_empr_data_cadastro, func_empr_ativo) VALUES ";
        $max = 0;
        while ($rows = mysql_fetch_array($resultado)){
            if ($max < 100){
                if ($max == 0){
                    $inserir .= "('".$rows["func_empr_fk_empresa"]."','".$rows["func_empr_nome"]."', '".$rows["func_empr_rg"]."', '".$rows["func_empr_cpf"]."', '".$rows["func_empr_rua"]."', '".$rows["func_empr_numero"]."', '".$rows["func_empr_complemento"]."', '".$rows["func_empr_bairro"]."', '".$rows["func_empr_cidade"]."', '".$rows["func_empr_estado"]."', '".$rows["func_empr_pais"]."', '".$rows["func_empr_data_cadastro"]."', '".$rows["func_empr_ativo"]."')";
                }else{
                    $inserir .= ", ('".$rows["func_empr_fk_empresa"]."','".$rows["func_empr_nome"]."', '".$rows["func_empr_rg"]."', '".$rows["func_empr_cpf"]."', '".$rows["func_empr_rua"]."', '".$rows["func_empr_numero"]."', '".$rows["func_empr_complemento"]."', '".$rows["func_empr_bairro"]."', '".$rows["func_empr_cidade"]."', '".$rows["func_empr_estado"]."', '".$rows["func_empr_pais"]."', '".$rows["func_empr_data_cadastro"]."', '".$rows["func_empr_ativo"]."')";
                }
                $max++;
            }else{
                $max = 0;
                $inserir .= ", ('".$rows["func_empr_fk_empresa"]."','".$rows["func_empr_nome"]."', '".$rows["func_empr_rg"]."', '".$rows["func_empr_cpf"]."', '".$rows["func_empr_rua"]."', '".$rows["func_empr_numero"]."', '".$rows["func_empr_complemento"]."', '".$rows["func_empr_bairro"]."', '".$rows["func_empr_cidade"]."', '".$rows["func_empr_estado"]."', '".$rows["func_empr_pais"]."', '".$rows["func_empr_data_cadastro"]."', '".$rows["func_empr_ativo"]."')";
                $result = $conexao->executeSQL($inserir);
                if ($result == false){
                    while ($result == false){
                        $result = $conexao->executeSQL($inserir);
                    }   
                    $conexao->executeSQL("INSERT INTO clin_auditoria (aud_descricao) VALUES ('Houve ROLLBACK na insercao da tabela clin_funcionario_empresa no bloco de $inicio a $final')");
                }else{
                    $inserir = "INSERT INTO clin_funcionario_empresa (func_empr_fk_empresa, func_empr_nome, func_empr_rg, func_empr_cpf, func_empr_rua, func_empr_numero, func_empr_complemento, func_empr_bairro, func_empr_cidade, func_empr_estado, func_empr_pais, func_empr_data_cadastro, func_empr_ativo) VALUES ";
                }
            }
        }
        $result = $conexao->executeSQL($inserir);
        if ($result == false){
            while ($result == false){
                $result = $conexao->executeSQL($inserir);
            }
            $conexao->executeSQL("INSERT INTO clin_auditoria (aud_descricao) VALUES ('Houve ROLLBACK na insercao da tabela clin_funcionario_empresa no bloco de $inicio a $final')");
        }
    }
   
    public function ETLRealizacaodeExames() {
        $conexao = new Conexao();
        //$resuLaudo = mysql_fetch_assoc($conexao->executeSQLBancoReal("SELECT count(*) as total FROM clin_func_empr_exames"));
        //echo $resuLaudo["total"];
        //ceil();
        $codigo = 5630548;
        $fim = 7949663;
        $resultado = $conexao->executeSQLBancoReal("SELECT clin_func_empr_exam_codigo, clin_func_empr_exam_fk_funcionario, clin_func_empr_exam_fk_exames, clin_func_empr_exam_data_exame, clin_func_empr_exam_qtd, clin_func_empr_exam_valor FROM clin_func_empr_exames WHERE clin_func_empr_exam_codigo > $codigo AND clin_func_empr_exam_codigo <= $fim ORDER BY clin_func_empr_exam_codigo ASC");
        //exit;
        $max = 0;
        $insertTempoExame = "INSERT INTO clin_tempo_exame (temp_exam_codigo, temp_exam_dia, temp_exam_mes, temp_exam_ano) VALUES ";
        $insertTempoLaudo = "INSERT INTO clin_tempo_laudo (temp_laudo_codigo, temp_laudo_dia, temp_laudo_mes, temp_laudo_ano) VALUES ";
        $insertExamesFunc = "INSERT INTO clin_func_empr_exames (clin_func_empr_exam_fk_tempo_exame, clin_func_empr_exam_fk_tempo_laudo, clin_func_empr_exam_fk_funcionario, clin_func_empr_exam_fk_exames, clin_func_empr_exam_fk_medico, clin_func_empr_exam_laudo, clin_func_empr_exam_qtd, clin_func_empr_exam_valor) VALUES ";
        while ($rows = mysql_fetch_array($resultado)){
            $resultadoLaudo = $conexao->executeSQLBancoReal("SELECT * FROM clin_laudo WHERE laudo_fk_func_empr_exames = '".$rows["clin_func_empr_exam_codigo"]."'");
            $dataExame = explode("-",$rows["clin_func_empr_exam_data_exame"]);
            $tempExDia = $dataExame[2];
            $tempExMes = $dataExame[1];
            $tempExAno = $dataExame[0];
            $boolLaudo = mysql_num_rows($resultadoLaudo);
            if ($boolLaudo > 0){
                $resuLaudo = mysql_fetch_assoc($resultadoLaudo);
                $dataLaudo = explode("-",$resuLaudo["laudo_data"]);
                $tempLdDia = $dataLaudo[2];
                $tempLdMes = $dataLaudo[1];
                $tempLdAno = $dataLaudo[0];
            }
            $codigo++;
            $idTempExame = $codigo;
            $idTempLaudo = $codigo;
            if ($max < 100){
                if ($max == 0){
                    $insertTempoExame .= "('".$idTempExame."', '".$tempExDia."', '".$tempExMes."','".$tempExAno."')";
                    if ($boolLaudo > 0){
                        $insertTempoLaudo .= "('".$idTempLaudo."', '".$tempLdDia."', '".$tempLdMes."','".$tempLdAno."')";
                    }
                    if ($boolLaudo > 0){
                        $insertExamesFunc .= "('".$idTempExame."', '".$idTempLaudo."', '".$rows["clin_func_empr_exam_fk_funcionario"]."', '".$rows["clin_func_empr_exam_fk_exames"]."', '".$resuLaudo["laudo_fk_medico"]."', '".$resuLaudo["laudo_descricao"]."', '".$rows["clin_func_empr_exam_qtd"]."', '".$rows["clin_func_empr_exam_valor"]."')";
                    }else{
                        $insertExamesFunc .= "('".$idTempExame."', '".$idTempLaudo."', '".$rows["clin_func_empr_exam_fk_funcionario"]."', '".$rows["clin_func_empr_exam_fk_exames"]."', '".$resuLaudo["laudo_fk_medico"]."', '".$resuLaudo["laudo_descricao"]."', '".$rows["clin_func_empr_exam_qtd"]."', '".$rows["clin_func_empr_exam_valor"]."')";
                    }
                }else{
                    $insertTempoExame .= ", ('".$idTempExame."', '".$tempExDia."', '".$tempExMes."','".$tempExAno."')";
                    if ($boolLaudo > 0){
                        $insertTempoLaudo .= ", ('".$idTempLaudo."', '".$tempLdDia."', '".$tempLdMes."','".$tempLdAno."')";
                    }
                    if ($boolLaudo > 0){
                        $insertExamesFunc .= ", ('".$idTempExame."', '".$idTempLaudo."', '".$rows["clin_func_empr_exam_fk_funcionario"]."', '".$rows["clin_func_empr_exam_fk_exames"]."', '".$resuLaudo["laudo_fk_medico"]."', '".$resuLaudo["laudo_descricao"]."', '".$rows["clin_func_empr_exam_qtd"]."', '".$rows["clin_func_empr_exam_valor"]."')";
                    }else{
                        $insertExamesFunc .= ", ('".$idTempExame."', '".$idTempLaudo."', '".$rows["clin_func_empr_exam_fk_funcionario"]."', '".$rows["clin_func_empr_exam_fk_exames"]."', '".$resuLaudo["laudo_fk_medico"]."', '".$resuLaudo["laudo_descricao"]."', '".$rows["clin_func_empr_exam_qtd"]."', '".$rows["clin_func_empr_exam_valor"]."')";
                    }
                }
                $max++;
            }else{
                $max = 0;
                /*TEMPO EXAME*/
                $insertTempoExame .= ", ('".$idTempExame."', '".$tempExDia."', '".$tempExMes."','".$tempExAno."')";
                $result1 = $conexao->executeSQL($insertTempoExame);
                if ($result1 == false){
                    while ($result1 == false){
                        $result1 = $conexao->executeSQL($insertTempoExame);
                    }   
                    $conexao->executeSQL("INSERT INTO clin_auditoria (aud_descricao) VALUES ('Houve ROLLBACK na insercao da tabela clin_tempo_exame no bloco de $inicio a $final')");
                }else{
                    $insertTempoExame = "INSERT INTO clin_tempo_exame (temp_exam_codigo, temp_exam_dia, temp_exam_mes, temp_exam_ano) VALUES ";
                }
                /*TEMPO LAUDO*/
                if ($boolLaudo > 0){
                    $insertTempoLaudo .= ", ('".$idTempLaudo."', '".$tempLdDia."', '".$tempLdMes."','".$tempLdAno."')";
                }
                $result2 = $conexao->executeSQL($insertTempoLaudo);
                if ($result2 == false){
                    while ($result2 == false){
                        $result2 = $conexao->executeSQL($insertTempoLaudo);
                        $conexao->executeSQL("INSERT INTO clin_auditoria (aud_descricao) VALUES ('Houve ROLLBACK na insercao da tabela clin_tempo_laudo no bloco de $inicio a $final')");
                    }
                }else{
                    $insertTempoLaudo = "INSERT INTO clin_tempo_laudo (temp_laudo_codigo, temp_laudo_dia, temp_laudo_mes, temp_laudo_ano) VALUES ";   
                }
               
                /*EXAMES DOS FUNCS*/
                if ($boolLaudo > 0){
                    $insertExamesFunc .= ", ('".$idTempExame."', '".$idTempLaudo."', '".$rows["clin_func_empr_exam_fk_funcionario"]."', '".$rows["clin_func_empr_exam_fk_exames"]."', '".$resuLaudo["laudo_fk_medico"]."', '".$resuLaudo["laudo_descricao"]."', '".$rows["clin_func_empr_exam_qtd"]."', '".$rows["clin_func_empr_exam_valor"]."')";
                }else{
                    $insertExamesFunc .= ", ('".$idTempExame."', '".$idTempLaudo."', '".$rows["clin_func_empr_exam_fk_funcionario"]."', '".$rows["clin_func_empr_exam_fk_exames"]."', '".$resuLaudo["laudo_fk_medico"]."', '".$resuLaudo["laudo_descricao"]."', '".$rows["clin_func_empr_exam_qtd"]."', '".$rows["clin_func_empr_exam_valor"]."')";
                }
                $result3 = $conexao->executeSQL($insertExamesFunc);
                if ($result3 == false){
                    while ($result3 == false){
                        $result3 = $conexao->executeSQL($insertExamesFunc);
                        $conexao->executeSQL("INSERT INTO clin_auditoria (aud_descricao) VALUES ('Houve ROLLBACK na insercao da tabela clin_func_empr_exames no bloco de $inicio a $final')");
                    }
                }else{               
                    $insertExamesFunc = "INSERT INTO clin_func_empr_exames (clin_func_empr_exam_fk_tempo_exame, clin_func_empr_exam_fk_tempo_laudo, clin_func_empr_exam_fk_funcionario, clin_func_empr_exam_fk_exames, clin_func_empr_exam_fk_medico, clin_func_empr_exam_laudo, clin_func_empr_exam_qtd, clin_func_empr_exam_valor) VALUES ";
                }
            }
        }
        $result1 = $conexao->executeSQL($insertTempoExame);
        if ($result1 == false){
            while ($result1 == false){
                $result1 = $conexao->executeSQL($insertTempoExame);
                $conexao->executeSQL("INSERT INTO clin_auditoria (aud_descricao) VALUES ('Houve ROLLBACK na insercao da tabela clin_tempo_exame no bloco de $inicio a $final')");
            }
        }
        $result2 = $conexao->executeSQL($insertTempoLaudo);
        if ($result2 == false){
            while ($result2 == false){
                $result2 = $conexao->executeSQL($insertTempoLaudo);
                $conexao->executeSQL("INSERT INTO clin_auditoria (aud_descricao) VALUES ('Houve ROLLBACK na insercao da tabela clin_tempo_laudo no bloco de $inicio a $final')");
            }
        }
        $result3 = $conexao->executeSQL($insertExamesFunc);
        if ($result3 == false){
            while ($result3 == false){
                $result3 = $conexao->executeSQL($insertExamesFunc);
                $conexao->executeSQL("INSERT INTO clin_auditoria (aud_descricao) VALUES ('Houve ROLLBACK na insercao da tabela clin_func_empr_exames no bloco de $inicio a $final')");
            }
        }
    }
}

?>