使用MyGeneration、doodads和Oracle,是否可以实现“自动编号主键”方案?
问题事实:我正在使用Oracle XE。我已经实现了下表和触发器:
CREATE TABLE "USERS"
(
"ID" NUMBER(38,0),
"USER_NAME" VARCHAR2(50),
"PASSWORD" VARCHAR2(50),
"EMAIL" VARCHAR2(100),
CONSTRAINT "USERS_PK" PRIMARY KEY ("ID") ENABLE
)
/
CREATE OR REPLACE TRIGGER "BI_USERS"
before insert on "USERS"
for each row
begin
select "USERS_SEQ".nextval into :NEW.ID from dual;
end;
/
ALTER TRIGGER "BI_USERS" ENABLE
/MyGeneration / Doodads创建了以下存储进程...
CREATE OR REPLACE PROCEDURE "XXX"."PI_USERS"
(
p_ID IN USERS.ID%type,
p_USER_NAME IN USERS.USER_NAME%type,
p_PASSWORD IN USERS.PASSWORD%type,
p_EMAIL IN USERS.EMAIL%type
)
IS
BEGIN
INSERT
INTO USERS
(
ID,
USER_NAME,
PASSWORD,
EMAIL
)
VALUES
(
p_ID,
p_USER_NAME,
p_PASSWORD,
p_EMAIL
);
END PI_USERS;序列和触发器组合工作正常。C#中的BusinessEntity类不接收新ID。
有什么推荐的方法允许调用代码接收新的记录ID吗?
发布于 2010-04-25 08:40:31
我还没有使用Doodads,所以不确定这是否是它所期望的,但是如果您像下面这样使用returning子句更改过程,并使p_ID参数in out,则p_ID参数应该在执行后保存新添加的ID。
CREATE OR REPLACE PROCEDURE "XXX"."PI_USERS"
(
p_ID IN OUT USERS.ID%type,
p_USER_NAME IN USERS.USER_NAME%type,
p_PASSWORD IN USERS.PASSWORD%type,
p_EMAIL IN USERS.EMAIL%type
)
IS
BEGIN
INSERT
INTO USERS
(
ID,
USER_NAME,
PASSWORD,
EMAIL
)
VALUES
(
p_ID,
p_USER_NAME,
p_PASSWORD,
p_EMAIL
)
RETURNING ID INTO p_ID;
END PI_USERS;发布于 2011-04-06 23:14:11
为什么不使用序列呢?如果您更喜欢使用TAPI,我仍然认为ID和WHO列在序列的触发器中是最好的。问题是需要一个纯的、密集的序列,其中没有跳过的数字吗?
https://stackoverflow.com/questions/2706082
复制相似问题