SqlServer转Oracle的方法逻辑代码

2017-10-22 21:24:16  访问(1970) 赞(0) 踩(0)


        #region SqlServer转Oracle

        /// <summary>
        /// 
        /// </summary>
        public readonly static string[] preFillChar = new string[5] { " ", " ", "" + '\t', "" + '\t', "(" };
        
        /// <summary>
        /// 
        /// </summary>
        public readonly static string[] postFillChar = new string[5] { " ", "" + '\t', " ", "" + '\t', ")" };

        /// <summary>
        /// 
        /// </summary>
        public readonly static string[] textFillChar = new string[2] { " ", "" + '\t' };

        /// <summary>
        /// 
        /// </summary>
        /// <param name="input"></param>
        /// <param name="oldChar"></param>
        /// <param name="newChar"></param>
        /// <returns></returns>
        protected string ToReplace(string input, string oldChar, string newChar)
        {
            string oText = "";
            string nText = "";
            int idx = -1;
            string lowerInput = input.ToLower();
            int maxLoop = 9999;

            for (int i = 0; i < 4; ++i)
            {
                oText = preFillChar[i] + oldChar + postFillChar[i];
                nText = preFillChar[i] + newChar + postFillChar[i];

                for (int j = 0; j < maxLoop; ++j)
                {
                    idx = lowerInput.IndexOf(oText);

                    if (idx == -1)
                        break;

                    input = input.Substring(0, idx) + nText + input.Substring(idx + oText.Length);

                    lowerInput = input.ToLower();
                }
            }

            return input;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="input"></param>
        /// <param name="oldChar"></param>
        /// <param name="newChar"></param>
        /// <returns></returns>
        protected string ToReplaceText(string input, string oldChar, string newChar)
        {
            string oText = "";
            string nText = "";
            int idx = -1;
            string lowerInput = input.ToLower();
            int maxLoop = 9999;

            for (int i = 0; i < 2; ++i)
            {
                oText = textFillChar[i] + oldChar + "(";
                nText = textFillChar[i] + newChar + "(";

                for (int j = 0; j < maxLoop; ++j)
                {
                    idx = lowerInput.IndexOf(oText);

                    if (idx == -1)
                        break;

                    input = input.Substring(0, idx) + nText + input.Substring(idx + oText.Length);

                    lowerInput = input.ToLower();
                }
            }

            return input;
        }

        /// <summary>
        /// 转SQL语句
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        protected string ToSQL(string input)
        {
            if (input == null || input.Length == 0)
                return "";

            input = ToReplace(input, "bigint", "number");
            input = ToReplace(input, "int", "integer");
            input = ToReplace(input, "datetime", "date");
            input = ToReplace(input, "getdate()", "sysdate");
            input = ToReplace(input, "(getdate())", "sysdate");
            input = ToReplace(input, "ntext", "long");
            input = ToReplace(input, "float", "number");
            input = ToReplaceText(input, "nvarchar", "varchar2");
            input = ToReplaceText(input, "decimal", "number");

            return input;

        }


        #endregion SqlServer转Oracle

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public string CreateTableSqlToOracle()
        {
            string sql = CreateTableSql;

            sql = sql.Replace("create table dbo.", "create table ");

            sql = ToSQL(sql);

            return sql;
        }


上一条:

下一条:


 

相关评论

评论加载中……
 

发表评论

类型:
内容:
  (Alt+Enter)