示例#1
0
文件: MtxLP.cpp 项目: kierzek/MUFINS
int MtxLP::getColType(string name) const{
    return get_col_type(ncol(name));
}
示例#2
0
bool  DBProcess::conversion_start_another(unsigned long timeout)
{

	char sql[1024] = { 0 };
	char tmp_str[512] = { 0 };
	char ttmp[512] = { 0 };
	char tt[100] = { 0 };
	int i  = 0;
	int j= 0;
	int index = 0;
	int colindex;
	long totleindex  = 0;

	Service::printConsole("[%c] is start to working\n",process_id);
	int k;
	for(k= 0; k < m_an_orcl.size(); k++)
	{
		index = 0;
		totleindex = 0;
		
		Service::printConsole("[%c] Start to transfering from Sybase_tabname: %s to Oracle_tabname:  %s\n",process_id,m_an_sy[k].c_str(),m_an_orcl[k].c_str());
		get_col_type_sy(m_an_sy[k]);// get v_type_sy for sybase;
		get_col_type(m_an_orcl[k]);// get v_type for orcl
		if(!makesql_sec(m_an_sy[k],m_col_sy[k]))
		{
			return false;
		}
		memset(ttmp, 0, sizeof(ttmp));
		snprintf(ttmp,1024, "insert into %s ( %s ) values (  ",m_an_orcl[k].c_str(),m_col_orcl[k].c_str());
		// exists or not and create the bak table.  first 
		if(!droptable(m_an_orcl[k]))
		{
			Service::printConsole("drop and create datebase table_bak failed\n");
			return false;
		}
		try
		{

			// truncate table second  /// 
			memset(tt,0,100);
			snprintf(tt,100,"TRUNCATE TABLE %s",m_an_orcl[k].c_str());
			m_dbmanager->getquery_orcl()->command(tt);
			m_dbmanager->getquery_orcl()->execute();	
		
			m_dbmanager->getquery_sy()->command(m_str);
			m_dbmanager->getquery_sy()->execute();
	
			if(m_dbmanager->getquery_sy()->eof())
				return false;			

			while(!m_dbmanager->getquery_sy()->eof())
			{
				colindex=0;
				memset(tmp_str,0,1024);
				m_dbmanager->getquery_sy()->fetchNext();
				{
					//
					vector<string> v_tmp = spiltChar(m_col_orcl[k],",");
 					char tmp[1024] = { 0 };
					for(j = 0;j < v_tmp.size();j++)
					{
						for (i = 0;i < v_type.size();i++)
						{
							if(strncmp(v_tmp[j].c_str(),v_type[i].col_name.c_str(),strlen(v_tmp[j].c_str())) == 0)
							{
								memset(tmp,0,1024);
								if( (strcmp(v_type[i].col_type.c_str(),"DATE") == 0) || (strcmp(v_type[i].col_type.c_str(),"TIMESTAMP(6)") == 0))
								{
									string t = m_dbmanager->getquery_sy()->getFieldByColumn(colindex++)->asString();
									if(strncmp(t.c_str(),"NULL",4) == 0)
										t = "";
									snprintf(tmp,1024," to_date(trim('%s'),'yyyy.mm.dd hh24:mi:ss') ",t.c_str());
								}
								else
								{
									if( (strcmp(v_type[i].col_type.c_str(),"CHAR") == 0) || (strcmp(v_type[i].col_type.c_str(),"VARCHAR2") == 0)){
										string t = m_dbmanager->getquery_sy()->getFieldByColumn(colindex++)->asString();
										if(strncmp(t.c_str(),"NULL",4) == 0)
											t.clear();
										snprintf(tmp,1024," TRIM('%s ') ",t.c_str());
									}
									if( strcmp(v_type[i].col_type.c_str(),"NUMBER") == 0)
										snprintf(tmp,1024," %f ",m_dbmanager->getquery_sy()->getFieldByColumn(colindex++)->asFloat());
								}
								break;

							}
							
						}
						if(j != v_tmp.size()-1)
						{
							strncat(tmp," , ",3);
						}
						else
						{
							strncat(tmp," ) ",3);
						}

						strncat(tmp_str,tmp,strlen(tmp));

					}
					
					//
				}
				snprintf(sql,1024,"%s %s",ttmp,tmp_str);

				m_dbmanager->getquery_orcl()->command(sql);
				m_dbmanager->getquery_orcl()->execute();
				index ++;
				totleindex++;
				if(index == MAXCOLUMS)
				{
					m_dbmanager->getquery_orcl()->command("commit");
					m_dbmanager->getquery_orcl()->execute();	
					index = 0;
				}	
			}

			m_dbmanager->getquery_orcl()->command("commit");
			m_dbmanager->getquery_orcl()->execute();


		}

		catch(BaseException& err)
		{
			m_logger.error("%s %s\r\n",err.name.c_str(),err.description.c_str());
			Service::printConsole("[%c] conversion from sybase to oracle failed !!oracle_tabname: %s \n",process_id ,m_an_orcl[k].c_str());

			return false ;
		}

		Service::printConsole("[%c] Transfer  from Sybase to Oracle Successed !!Sybase_tabnae: %s  >> Oracle_tabname: %s .TotleIndex:%ld\n",process_id, m_an_sy[k].c_str(),m_an_orcl[k].c_str(),totleindex);
	}

	Service::printConsole("[%c] Has been finished the work O(¡É_¡É)O~\n",process_id);
	
	return  true ;

}