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

ТЕМА:

Re: joined update в Oracle 12 года 8 мес. назад #2758

  • Rita
  • Rita аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Спасибо получено: 0
Jack, ты попал в самую точку. Именно этого я и хотела, но такой запрос в 8i не проходит, а на MSSQL2K на ура (конечно только на join заменить бы для читабельности)

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

Re: joined update в Oracle 12 года 8 мес. назад #2759

Чего-то тебя зациклило на JOIN(INNER JOIN). В Oracle8i нет такой конструкции. Она только в 9i появилась. Используй "+"

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

Re: joined update в Oracle 12 года 8 мес. назад #2760

имхо вы правильно подметили проблему, но решение ее не в переписывании sql запроса, а в создании индекса по полям по которым соединяются таблицы:
a.obj_id = b.object_code_4

, для избежания вот этого момента:
UPDATE	FORTMETA	INVENT_KARTA			

  TABLE ACCESS FULL	FORTMETA	INVENT_KARTA	25	33326	866476

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

Re: joined update в Oracle 12 года 8 мес. назад #2761

  • Rita
  • Rita аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Спасибо получено: 0
Jack, в твоем примере в переменную i запихиваются значения двух полей, тогда какой тип у этой переменной (указатель на курсор?? и почему ее заранее объявлять не надо).
Вопрос, наверное, ламерский, но у меня мало опыта по работе с pl/sql.

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

Последнее редактирование: от Rita.

Re: joined update в Oracle 12 года 8 мес. назад #2762

в переменную i запихиваются значения двух полей, тогда какой тип у этой переменной


Во-первых в переменную i - не запихиваются значения каких либо полей. В данном случае i - это внутренняя переменная цикла, которая существует только внутри цикла.
Во-вторых, её обьявлять не надо потому-что это так предусмотрено синтаксисом PL/SQL.

Тип ествественно целый

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

Re: joined update в Oracle 12 года 8 мес. назад #2763

Это такой вот оракловый синтаксис. Можно написать по-другому, более похоже на T-SQL:

declare 

  cursor cr is 

    select b.object_code_4

         , b.analitic_id

    from v_metapos_saldo b

       , v_metadoc_saldo c

    where b.doc_id = c.id

      and a.obj_id = b.object_code_4

      and c.Number like 'X0-%';

  i cr%rowtype;

begin

  open cr;

  loop

    fetch cr into i;

    exit when cr%notfound;

    update invent_karta a set 

      a.stoim_bux_id = i.nalitic_id

    where a.obj_id = i.object_code_4;

  end loop;

  close cr;

exception when others then

  if cr%isopen then close cr; end if;

  raise;

end;    

/

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

  • Страница:
  • 1
  • 2
  • 3
  • 4
  • 5
Время создания страницы: 0.217 секунд