using System;
using System.Data;
using System.ComponentModel;
using System.Reflection;
using Oracle.DataAccess.Client;
namespace Harlinn.Oracle.DBTool.Utils.DB
{
public class MetaData
{
private static readonly log4net.ILog sfLog = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private static void LogException(Exception exc, MethodBase method)
{
Logger.LogException(sfLog, exc, method);
}
private const string OWNER = "SYS";
private const string PACKAGE = "DBMS_METADATA";
private static OracleConnection Connection
{
get
{
return ConnectionManager.Connection;
}
}
public static string GetDDL(string owner, string objectName, ObjectType objectType)
{
try
{
OracleCommand oracleCommand = Connection.CreateCommand();
using (oracleCommand)
{
string typeName = ObjectReader.ObjectTypeNames[(int)objectType];
string sql = "select SYS.DBMS_METADATA.GET_DDL(:typeName,:objectName,:owner) FROM DUAL";
oracleCommand.CommandText = sql;
oracleCommand.Parameters.Add(new OracleParameter(":typeName", OracleDbType.Varchar2)).Value = typeName;
oracleCommand.Parameters.Add(new OracleParameter(":objectName", OracleDbType.Varchar2)).Value = objectName;
oracleCommand.Parameters.Add(new OracleParameter(":owner", OracleDbType.Varchar2)).Value = owner;
object scalar = oracleCommand.ExecuteScalar();
if (scalar != null)
{
return scalar.ToString();
}
return null;
}
}
catch (Exception exc)
{
LogException(exc, MethodBase.GetCurrentMethod());
throw;
}
}
}
}