zoukankan      html  css  js  c++  java
  • SQL server、Oracle中拿到新增列时的自增字段值

    1.SQL server

    INSERT INTO NEWS (TITLE) VALUES ("TITLE");
    
    SELECT @@IDENTITY--第一种方式
    
    SELECT @ID= SCOPE_IDENTITY()--第一种方式
    
    --第一种方式是全局变量,如果是多条INSERT语句同时执行的话,取值可能出现误差
    --建议使用第二种方式

    2.Oracle

    Oracle中不能像SQL server中创建自增标识符。如果需要有自增列的话可以用自增序列来帮助实现。

    创建自增序列

           DROP SEQUENCE WEB_FEEDBACK_SEQ; /* 若以存在则删除*/
    
           CREATE SEQUENCE WEB_FEEDBACK_SEQ
           INCREMENT BY 1 -- 每次加几个
           START WITH 1 -- 从1开始计数
           NOMAXVALUE -- 不设置最大值
           NOCYCLE -- 一直累加,不循环
           NOCACHE; -- 不建缓冲区

    新增一条数据不需要返回自增列值时可以用触发器实现

    创建触发器

    CREATE OR REPLACE TRIGGER WEB_FEEDBACK_TRIGGER      --WEB_FEEDBACK_TRIGGER    触发器名称
    BEFORE INSERT ON WEB_FEEDBACK                       --WEB_FEEDBACK是表名
    FOR EACH ROW
    DECLARE
    NEXTID NUMBER;
    BEGIN
    IF :NEW.KEY_ID IS NULL OR :NEW.KEY_ID=0 THEN                --KEY_ID 是列名
    SELECT WEB_FEEDBACK_SEQ.NEXTVAL                     --WEB_FEEDBACK_SEQ 正是刚才创建的序列
    INTO NEXTID
    FROM SYS.DUAL;
    :NEW.KEY_ID:=NEXTID;
    END IF; 
    END WEB_FEEDBACK_TRIGGER ;
    

    如果新增一条数据时需要返回自增列值可以这样实现(C#代码)

            #region 增删改数据访问
            /// <summary>
            /// 增删改数据访问
            /// </summary>
            /// <param name="CommandText">语句</param>
            /// <param name="OraParams">参数</param>
            /// <returns></returns>
            public static int EditData(string CommandText, OracleParameter[] OraParams = null)
            {
                int num = 0;
                try
                {
                    string connstr = ShopDal.conntion();
                    OracleConnection conn = new OracleConnection(connstr);
                    if (conn.State == ConnectionState.Closed)
                    {
                        conn.Open();
                    }
    
                    OracleCommand command = conn.CreateCommand();
                    command.Connection = conn;
                    command.CommandText = CommandText;
    
                    for (int i = 0; i < OraParams.Length; i++)
                    {
                        command.Parameters.Add(OraParams[i]);
                    }
    
                    num = command.ExecuteNonQuery();
    
                    command.Parameters.Clear();
                    conn.Close();
                }
                catch (Exception ex)
                {
    
                    throw;
                }
                return num;
            }
            #endregion
    
            #region 获取主键ID
            /// <summary>
            /// 获取主键ID
            /// </summary>
            /// <returns></returns>
            public static string MarkSenumber()
            {
                string Senumber = string.Empty;
                try
                {
                    string connstr = ShopDal.conntion();
                    OracleConnection conn = new OracleConnection(connstr);
                    if (conn.State == ConnectionState.Closed)
                    {
                        conn.Open();
                    }
    
                    OracleCommand command = conn.CreateCommand();
                    command.Connection = conn;
                    command.CommandText = "Select WEB_FEEDBACK_SEQ.nextval from dual";
                    Senumber = command.ExecuteScalar().ToString(); ;
                    command.Parameters.Clear();
                    conn.Close();
                }
                catch (Exception ex)
                {
    
                    throw;
                }
                return Senumber;
            }
            #endregion
    
            #region 添加
            public static int SubmitFeed_Methods(string TITLE)
            {
                //获取主键ID
                string Senumber = MarkSenumber();
    
                OracleParameter[] OraParams = new OracleParameter[2];
                OraParams[0] = new OracleParameter(":ID", OracleDbType.Varchar2, 25);
                OraParams[1] = new OracleParameter(":TITLE", OracleDbType.Int32);
    
                OraParams[0].Value = Senumber;
                OraParams[1].Value = Convert.ToInt32(TITLE);
    
                string CommandText = @" 
                                        insert into web_feedback(ID, TITLE) values(:ID,:TITLE)";
    
                int num = EditData(CommandText, OraParams);
    
                return num;
            }
            #endregion
    View Code

    以前一直使用SQL server,最近开始接触Oracle,记录一下遇到的坑。

    对了 记住Oracle中如果有多条语句一起执行,在每条语句结尾加;(分号,当前语句结束)

  • 相关阅读:
    关于jsp
    NASA: A Closer View of the Moon(近距离观察月球)
    NASA: Seeing Jupiter(注视木星)
    NASA: SpaceX的猎鹰9号火箭将龙飞船发射到国际空间站
    导航狗IT周报第十五期(July 8, 2018)
    导航狗IT周报-2018年05月27日
    导航狗IT周报-2018年05月18日
    小苹果WP(实验吧-隐写术)
    Python实现猜数字游戏1.0版
    代码方式设置WordPress内所有URL链接都在新标签页打开
  • 原文地址:https://www.cnblogs.com/summert/p/8795111.html
Copyright © 2011-2022 走看看