我现在在oracle数据库中创建了一个序列为了给custom_id字段设置成自动增长列:
create sequence for_text
increment by 1
start with 1
nomaxvalue
nocache然后在C#程序里面 我怎么来调用这个for_text序列呢??我要让custom_id这个字段成为自动增长列啊。
我在C#程序里面是要做一个insert操作的,往oracle表里面插入数据,就这个custom_id字段不知道插入数据的时候写什么好了。。
请大哥们来帮忙啊!!!谢谢了啊!!!!

解决方案 »

  1.   

    不是啊,我看他们使用序列的时候都要插入那个值的:
    -----------------------------使用序列-------------------
    insert into Text_Table
    values(for_test.nextval,'序列测试','这是一个序列使用的例子')就是这个for_text.nextval , 这个就是,这个就是我那个custom_id字段。所以在C#程序里面的时候  我就不知道怎么写这个值了。
      

  2.   

    for_text.nextval 就是调用了那个序列啊。。C#程序里面到底怎么写呢啊??大哥们帮帮忙啊。。我也很热啊,急的冒汗啊!!
      

  3.   

    除了创建sequence之外 还需要创建触发器创建sequence//s_country_id 为sequence名
    create sequence s_country_id increment by 1 start with 1 maxvalue 999999999; 
    触发器//SCOTT.STATICSTOPINFO为表名,SCOTT.trigger_stopinfo为触发器名,pid 为自增列的名,其他照打就可以了
    CREATE OR REPLACE TRIGGER SCOTT.trigger_stopinfo 
      before insert ON SCOTT.STATICSTOPINFO  
      for each row
    declare 
      nextid number; 
    begin     select S_COUNTRY_ID.nextval 
        into nextid 
        from sys.dual; 
        :new.pid:=nextid; 
        
    end tri_test_id;
    pid为varchar2(64)就应该够了创建好触发器,在insert数据的时候,values第一列要用default,后边的列正常,一定要有default切记!insert into 表 values (defautl,'','')
      

  4.   

    如果你没有 oracle的图形界面的话,触发器那段可以在程序中执行,和执行insert,update语句一样,把insert或update语句换成触发器代码就可以了
      

  5.   

    谢谢你哈 llwinnner大哥! 但是感觉还是有点问题,因为我的程序是把所有的insert都写在一个方法里面,然后外面直接调用,我用的动软+oracleHeple来做的。所以我现在的问题就是:我这个custom_id字段怎么来设置咧,您说了第一次必须是插入default了,那我这里要是insert的时候要是value写个default,后来的调用这个方法的就都是default了,这个地方我先想想好了。非常感谢您啊!!!!
      

  6.   

    直接在sql里面写就可以了。create sequence for_test start with 1 increment by 1;select for_test.nextval from dual;
    create table PPMS_Test(
    SID number,
    SName nvarchar2(20),
    Phone nvarchar2(15)
    );select * from ppms_test;
    public void Insert()
            {
                string strSql = "insert into ppms_test values(for_test.nextval,:SName,:Phone)";
                OracleParameter[] parameters = { new OracleParameter(":SName",OracleType.NVarChar),
                                               new OracleParameter(":Phone",OracleType.NVarChar)};
                parameters[0].Value = "cui";
                parameters[1].Value = "12321321";
                OracleHelper.ExecuteNonQuery(OracleHelper.ConnectionString,CommandType.Text,strSql,parameters);
            }可以插入记录
      

  7.   

    不是第一次插入用default
    是每一次插入 第一列都是default,他就自增了。你写在一个方法里边没有问题的
      

  8.   

    恩  大哥 我弄好  是滴     每次都用default  万分感谢您啊!!!!!!!!!
      

  9.   


    Oracle 11g 学习笔记 (3) 
    http://www.cnblogs.com/WizardWu/archive/2008/11/28/1343100.html(七) Oracle 的 Sequence,等同其它数据库的 IdentityOracle 不支持 SQL Server 和 Sybase 都支持的 Identity 自动增号字段,也不支持 INSERT INTO 以后立即取得最新一笔记录 Identity 号码的「SELECT @@identity;」语法, 
    要达成上述功能,必须改用 Sequence (流水号)。Sequence 不包含在 table 中,某一个 Sequence 亦不和 table 做一对一的对应。要用 Sequence,必须先自己手动建立,语法为:
    CREATE SEQUENCE seq_name;

    CREATE SEQUENCE seq_name 
    INCREASE BY 1 
    START WITH 1 
    MAXVALUE 9999 
    NOCACHE 
    NOCYCLE;若不下参数,预设从 1 开始,每次增号 1,最大值为 10 的 27 次方,存储值达到 MAXVALUE 不会自动重新编号 (若对应至 table 的 Primary Key,此值应采默认值 NOCYCLE); 
    CACHE 选项的默认值,会在 memory 产生 20 笔数据。执行以下语句,可看到所有 Sequence 的设定及存储内容。其中的 LAST_NAME 为其下一个将要产生的值。
    select * from user_sequences;
    要看某一个 Sequence 的当前值、下一个值,可用如下语句:
    select table1_seq.CURRVAL from dual;
    select table1_se1.NEXTVAL from dual;
    需注意第二个语句 NEXTVAL 只要一被执行到,该个 Sequence 的内部编号,就会自动增加一个号码,而不仅只是 select 撷取而已。
    若要搭配 Sequence,新增一笔记录到 table,可用如下语法:
    INSERT INTO table1 (id, name) VALUES (table1_seq.NEXTVAL, 'name1');
    在 Oracle 10g 以前的版本,或您用的是 OleDb 联机方式 (OracleClient 亦可),当您想在 INSERT INTO 记录时,Primary Key 希望能写入 Sequence 的值,可用如下写法 (亦 
    可在新增完成后,立即传回该笔记录最新的 Sequence 值):using System.Data.OleDb;
    OleDbConnection odConn = null;
    OleDbCommand odCmd = null;
    Int64 intDATA_ID_AfterInserted = 0;
    string strSql = "BEGIN SELECT table1_seq.NEXTVAL INTO :id FROM dual; INSERT INTO table1(id, name) VALUES(:id, :name); END;";...中间略...OleDbParameter p;
    p = odCmd.Parameters.Add(":id", OleDbType.Double, 7);
    p.Direction = ParameterDirection.Output;
    odCmd.Parameters.Add(":name", OleDbType.VarWChar, 30).Value = TextBox1.Text;odCmd.ExecuteNonQuery();
    intDATA_ID_AfterInserted = Convert.ToInt64(p.Value); // 立即传回该笔记录最新的 Sequence 值
    若您用的是 Oracle 10g 及以后的版本,且用的是 OracleClient Data Provider,则可用以下的「RETURNING INTO」更简洁写法。但须注意,OleDb 联机方式若用此种写法,在写 
    入时并不会造成 error 或引发 exception,但写入值会不正常。string strSql = "INSERT INTO table1(id, name) VALUES(table1_seq.NEXTVAL, :name) RETURNING id INTO :id";
    ---------------------------------------------
    本帖第 (七) 点的 ASP.NET 2.0 + Oracle 11g 示例下载点 (批次新增 + 新增后马上取得最新 Sequence 值):
    http://files.cnblogs.com/WizardWu/081128.zip