请教oracle9i建立递增列的方法:
我对oracle9i数据库一窍不通,请教在怎么建立如sql server一样建立递增列,最好是界面操作,如果是语句的话,我根本不知道在哪儿输入。
谢谢!!

解决方案 »

  1.   

    三、IDENTITY 和 SEQUENCESql Server中,定义一个列为递增列很容易,但我在Oracle中却怎么也找不到设置的方法。不过查了点资料后知道Oracle中有个叫Sequence的对象,产生一个唯一的序列号,类似于Sql Server中的IDENTITY。于是,我做了如下实验: 首先,在Oracle中创建了一个名为TEST_SEQ的Sequence对象,SQL语句如下:create sequence TEST_SEQminvalue 100maxvalue 999start with 102increment by 1nocache;     语法应该是比较易懂的,最小最大值分别用minvalue,maxvalue表示,初始值是102(这个数字是动态变化的,我创建的时候设的是100,后因插入了2条数据后就自动增加了2),increment当然就是步长了。在PL/SQL中可以用test_seq.nextval访问下一个序列号,用test_seq.currval访问当前的序列号。     定义完了Sequence,接下来就是创建一个存储过程InsertRecordWithSequence:--这次我修改了test表的定义,和前面的示例不同。其中,UserID是PK。create or replace procedure InsertRecordWithSequence(UserID   out number,                                                         UserName in varchar2,                                                         UserAge  in number) isbegin         insert into test(id, name, age)         --插入一条记录,PK值从Sequece获取         values(test_seq.nextval, UserName, UserAge);/*返回PK值。注意Dual表的用法*/select test_seq.currval into UserID from dual;    end InsertRecordWithSequence;    接下来,就是在C#中进行调用了:string connectionString = "Data Source=YXZHANG;User ID=YXZHANG;Password=YXZHANG";     string queryString = "InsertRecordWithSequence";     OracleConnection cn = new OracleConnection(connectionString);     OracleCommand cmd = new OracleCommand(queryString,cn);     cmd.CommandType = CommandType.StoredProcedure;     cmd.Parameters.Add("UserID",OracleType.Number);     cmd.Parameters["UserID"].Direction = ParameterDirection.Output;     cmd.Parameters.Add("UserName","Jack");     cmd.Parameters.Add("UserAge",40);          try     {          cn.Open();          int rowAffected = cmd.ExecuteNonQuery();          Console.WriteLine("{0}行已插入。",rowAffected);          Console.WriteLine("插入行的ID为:{0}",cmd.Parameters["UserID"].Value.ToString());         cn.Close();     }     catch( OracleException ex )     {         Console.WriteLine("Exception occurred!");         Console.WriteLine("The exception message is:{0}",ex.Message.ToString());     }     finally     {         Console.WriteLine("------------------End-------------------");     }小结:    使用Sequece对象可以很容易地创建唯一序列,在存储过程中的调用也十分方便,只要sequence_name.nextval以及sequence.currval就能得到下一个以及当前的序列值。倒是Dual表值得注意。 
      

  2.   

    哈哈,搞出来了。
    先见一个序列,比如S_ID
    然后在表里建一列:EM_ID
    然后再建一个触发,在插入之前最后在写上:
    for each row
    begin
    selset S_ID.nextral into:new.EM_ID from dual
    end;
    就可以了。其中from dual不要变。