SQL Server2000中是否有 Oracle中的 序列 的概念
rt
[解决办法]
IDENTITY 和 SEQUENCE
Sql Server中,定义一个列为递增列很容易,但我在Oracle中却怎么也找不到设置的方法。不过查了点资料后知道Oracle中有个叫Sequence的对象,产生一个唯一的序列号,类似于Sql Server中的IDENTITY。于是,我做了如下实验:
首先,在Oracle中创建了一个名为TEST_SEQ的Sequence对象,SQL语句如下:
create sequence TEST_SEQ
minvalue 100
maxvalue 999
start with 102
increment by 1
nocache;
语法应该是比较易懂的,最小最大值分别用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)
is
begin
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表值得注意。
[解决办法]
局域网:
客户端唯一标识有代表性的有:
1。IP:16进制,8个字符
2。登陆用户名ID:一般登陆名是唯一的。
等