Используя MyGeneration, doodads и Oracle XE, возможно ли реализовать схему «первичный ключ с автоматическим номером»? - PullRequest
1 голос
/ 25 апреля 2010

Используя MyGeneration, doodads и Oracle XE, возможно ли реализовать схему "первичный ключ с автоматическим номером"?

Факты проблемы: Я использую 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;

Комбинация последовательности и триггера работает нормально. Класс BusinessEntity в C # не получает новый идентификатор.

Любые рекомендуемые способы, позволяющие вызывающему коду получить новый идентификатор записи?

Ответы [ 2 ]

2 голосов
/ 25 апреля 2010

Я не использовал Doodads, поэтому не уверен, что это именно то, что он ожидает, но если вы измените процедуру, как показано ниже, используя предложение returning и сделаете параметр p_ID in out, то параметр p_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;
1 голос
/ 06 апреля 2011

Почему бы не использовать последовательность? Если вы предпочитаете использовать TAPI, я все же думаю, что столбцы ID и ВОЗ лучше всего показывать в триггере последовательности. Является ли проблемой необходимость в чистой, плотной последовательности, где нет пропущенных чисел?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...