powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Обновление после добавления
11 сообщений из 11, страница 1 из 1
Обновление после добавления
    #38962805
hauk70
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE ORDERED_ITEMS (
    ID INTEGER NOT NULL,
    ID_GOODS INTEGER NOT NULL,
    QUANTITY INTEGER NOT NULL,
    ORDER_AMOUNT INTEGER NOT NULL,
    ID_ORDER INTEGER NOT NULL)



Код: sql
1.
2.
3.
4.
5.
CREATE TABLE ORDERS (
    ID INTEGER NOT NULL,
    ID_STAFF INTEGER NOT NULL,
    DATETIME "DATE",
    ORDER_AMOUNT INTEGER)



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
create or alter procedure MAKE_ORDER_AMOUNT (
    QUANTITY integer not null,
    PRICE integer not null,
    LAST_ORDER_AMOUNT integer not null)
returns (
    NEW_ORDER_AMOUNT integer)
as
begin
  NEW_ORDER_AMOUNT=LAST_ORDER_AMOUNT+(PRICE*QUANTITY);
  suspend;
end



Вот ошибка
Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
RESULT.
At line 11, column 43. ругается на order_amount = result, типо не видит, подскажите в чем проблема

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE OR ALTER trigger ordered_items_bi for ordered_items
active before insert position 0
as
declare variable result integer;
declare variable orderamount integer;
begin
  if (new.id is null) then
    new.id = gen_id(gen_ordered_items_id,1);
  orderamount = (select orders.order_amount from ordered_items, orders where new.id_order = orders.id);
  execute procedure make_order_amount(new.quantity,new.price,orderamount)returning_values(result);
  update orders set order_amount = result where new.id_order = orders.id;
end
...
Рейтинг: 0 / 0
Обновление после добавления
    #38962812
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Hauk70!

чё сделать то хотел?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обновление после добавления
    #38962821
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hauk70,
ну может вот так
Код: sql
1.
 ....returning_values(:result);
...
Рейтинг: 0 / 0
Обновление после добавления
    #38962822
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hauk70,

зачем здесь вообще эта процедура? Проще выражение написать
...
Рейтинг: 0 / 0
Обновление после добавления
    #38962839
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисhauk70,

зачем здесь вообще эта процедура? Проще выражение написать
Не спеши
Когда оно скомпилится и прийдет время отработать триггеру будут у автора еще вопросы по поводу
Multiple rows in singleton select
...
Рейтинг: 0 / 0
Обновление после добавления
    #38963226
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hauk70,

В Orders поле DATETIME типа DATE - это такой прикол? Может лучше сразу в морг?
...
Рейтинг: 0 / 0
Обновление после добавления
    #38963240
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,

в FB DATETIME не зарезервировано, не путай TIMESTAMP. Я тут тоже в одном топике на это накололся, потому как здесь оно подсвечено. Хотя лучше так конечно не называть.
...
Рейтинг: 0 / 0
Обновление после добавления
    #38963253
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Именно об этом - это ж надо так спроектировать
...
Рейтинг: 0 / 0
Обновление после добавления
    #38963265
hauk70
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
по поводу абсурдности действий скажу сразу - это требование в лабке.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
as
declare variable result integer;
declare variable orderamount integer;
begin
  if (new.id is null) then
    new.id = gen_id(gen_ordered_items_id,1);
  orderamount = (select first 1 orders.order_amount from ordered_items, orders where new.id_order = orders.id);
  execute procedure make_order_amount(new.quantity,new.price,orderamount)returning_values(:result);
  update orders set order_amount = :result where new.id_order = orders.id;
end


я так понял двоеточие перед переменной указывает на то что это переменная, а не название столбца? не смог этого нагуглить
...
Рейтинг: 0 / 0
Обновление после добавления
    #38963293
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hauk70по поводу абсурдности действий скажу сразу - это требование в лабке.

Это вотhauk70
Код: sql
1.
  orderamount = (select first 1 orders.order_amount from ordered_items, orders where new.id_order = orders.id);


никак не объясняется "требованием в лабке"

Код: sql
1.
  select R.order_amount from orders R where R.id = new.id_order  into :orderamount;


...
Рейтинг: 0 / 0
Обновление после добавления
    #38965338
Dmitry Kurbsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hauk70,

Код: sql
1.
2.
3.
4.
5.
6.
7.
create trigger ordered_items_au for ordered_items
active AFTER insert position 0
as
begin
  update orders set order_amount=order_amount+new.order_amount
  where id=new.id_order;
end
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Обновление после добавления
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]