Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
SQL, PL/SQL, T-SQL: запросы, DML DDL операторы, пакеты, процедуры, функции, триггеры и последовательности.
  • Страница:
  • 1
  • 2

ТЕМА:

Oracle: Как вытащить Identity 24 июль 2011 11:26 #2951

  • Myk
  • Myk аватар Автор темы
  • Не в сети
  • Новичок
  • Новичок
  • Сообщений: 44
  • Спасибо получено: 0
Привет всем!
Задача проста до безобразия - надо вытащить текущий Identity из Sequence для определенной таблицы. Sequence заранее не известен. Ктонить сталкивался с такой проблемой?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Как вытащить Identity 24 июль 2011 11:26 #2952

select last_number from user_sequences where sequence_name = 'YOUR_SEQ'


только не понятно
>Sequence заранее не известен
неизвестно из какого seq-а генерится ключ для таблицы ? Посмотри триггер на инсерт или трассируй сессию с приложением

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Как вытащить Identity 24 июль 2011 11:27 #2953

  • Myk
  • Myk аватар Автор темы
  • Не в сети
  • Новичок
  • Новичок
  • Сообщений: 44
  • Спасибо получено: 0
Надо адаптировать код который работает, на SQL для работы на оракле. Грубо говоря существует COM сервер транслирующий запросы на базу данных (в данном случае Insert) и возвращающий Identity.
Если напрямую отображать MSSQL на Oracle, то известно все, кроме самого sequence... можно ли както программно решить этот трабл?

Хотелось бы сменить просто провайдера с MicroSofta на ORACLE и чтобы это заработало, но получаем кучу мелких и не очень проблем :(Сам я к сожалению в Oracle пока не в зуб ногой.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Как вытащить Identity 24 июль 2011 11:29 #2954

create table test (

    test_id number(9)

  , name varchar2(32)

  , constraint pk_test primary key (test_id)

)

/



create sequence sq_test;
insert into test (test_id, name)

values (sq_test.nextval, :name)

return test_id into :test_id;
select sq_test.nextval into :test_id from dual;

insert into test (test_id, name)

values (:test_id, :name)
create or replace trigger tbiur_test

before insert or update on test

for each row

begin

  if :new.test_id is null then

    select sq_test.nextval into :new.test_id from dual;

  end if;

end;

/



insert into test (name)

values ('name2')

return test_id into :test_id;

Ну и так далее:)Ты про это?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Как вытащить Identity 24 июль 2011 11:30 #2955

Это надо в рамочку и в FAQ :-)

только, чтоб уж совсем красиво
>before insert or update on test
before insert or update of test_id on test

и
>insert into test (name)
>values ('name2')
>return test_id into :test_id;
returning test_id into :test_id;

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Как вытащить Identity 24 июль 2011 11:31 #2956

  • Myk
  • Myk аватар Автор темы
  • Не в сети
  • Новичок
  • Новичок
  • Сообщений: 44
  • Спасибо получено: 0
Близко, но:

insert into test (name)
values ('name2')
return test_id into :test_id;

Я не знаю как называется поле с Identity , т.е не знаю test_Id :(....

у меня тут мысль родилась - Может быть на этапе экспорта базы в Oracle создать тип объекта для каждой таблицы типа obj_TableName и в нем завести поле identity с идентификатором Sequence .... а потом если надо узнать identity, всегда можно поднять этот объект и узнать этот identity...

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1
  • 2