Oracle数据库主键设计
首先,创建一个队列Sequence
-- Create sequence
create sequence PRIMARYKEYSEQUENCE
minvalue 0
maxvalue 999999999999999999999999999
start with 83
increment by 1
nocache;
然后,创建触发器Triggers
-- Create triggers
create or replace trigger XG_ATTENDANCETRIGGER
before insert on xg_attendance
for each row
declare
nextid number;
begin
if:new.AID is null or:new.AID=0
then
select primarykeysequence.nextval into nextid from sys.dual;
:new.AID:= nextid;
end if;
end XG_ATTENDANCETRIGGER;
最后,在包Packages中创建存储过程Procedure
-- Create procedure
create or replace package body xg.AttendancePackage is
procedure proc_insertAttendance(wid in varchar2,inTime in varchar2,aid out varchar2)
is
begin
insert into xg.xg_attendance(wid,aintime) values(wid,inTime);
select xg.primarykeysequence.currval into aid from sys.dual;
end;
end AttendancePackage;
在ASP.NET中用企业库调用Oracle的存储过程
using System.Data;
using EntityLibrary;
using System.Data.Common;
using System.Diagnostics;
public class AttendanceBiz:Biz
{
/// <summary>
/// 记录职工上班时间
/// </summary>
/// <param name="wid">职工号</param>
/// <param name="inTime">上班时间</param>
/// <returns>出勤记录编号</returns>
public int SetInTime(string wid,string inTime)
{
DbCommand cmd = _database.GetStoredProcCommand("AttendancePackage.proc_insertAttendance");
_database.AddInParameter(cmd, "wid", DbType.String,wid);
_database.AddInParameter(cmd, "inTime", DbType.String,inTime);
_database.AddOutParameter(cmd, "aid", DbType.Int32, 22);
cmd.Connection = _database.CreateConnection();
int aid = 0;
try
{
cmd.Connection.Open();
cmd.ExecuteNonQuery();
aid = Convert.ToInt32(cmd.Parameters["aid"].Value);
}
catch(DbException e)
{
if (!EventLog.Exists("csit"))
{
EventLog.CreateEventSource("csit", "csit");
}
EventLog.WriteEntry("csit", e.Message);
}
finally
{
cmd.Connection.Close();
}
return aid;
}
}
相关参考:http://www.cnblogs.com/tintown/archive/2005/03/02/111459.html
作者: XuGang 网名:钢钢 |
出处: http://xugang.cnblogs.com |
声明: 本文版权归作者和博客园共有。转载时必须保留此段声明,且在文章页面明显位置给出原文连接地址! |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架