Форум: "Базы";
Текущий архив: 2006.08.13;
Скачать: [xml.tar.bz2];
ВнизКак найти запись и изменить Найти похожие ветки
← →
SamProf © (2006-06-04 10:22) [0]Вопрос по суте не по Delphi, а по SQL. Пишу в InterBase.
Суть вопроса в следующем:
Есть таблица:
ID - число
Name : чторка
Data1, Data2: Даты
Я хочу создать хранимую процедудуру, с входящими параметрами:
aname- строка
adata1,adata2 - даты
и выходящим: aid - число
эта процедура ищет в таблице запись, в уоторой name= :anameесли такая запись существует, то она изменяет только data2=:adata2, а остальные поля не трогает
Если такой записи нет, то она добавляет запись с
i = GEN_ID(GEN_NEW_TABLE_ID, 1);
INSERT INTO Flist VALUES (:i,:aname, :adata1, :adata2);
Не зависимо от того нашлась ли запись или нет нужно вернуть Id в aid.
Спасибо! Уж извините, если вопрос глупый....
← →
unknown © (2006-06-04 12:21) [1]
CREATE PROCEDURE SAMPROF_PROCEDURE (
ANAME VARCHAR(100),
ADATA1 DATE,
ADATA2 DATE)
RETURNS (
AID INTEGER)
AS
begin
select max(ID) from Flist where name= :aname into :AID;
if (not AID is null) then
update Flist set data2=:adata2 where ID=:AID;
else
begin
AID=Gen_ID(GEN_NEW_TABLE_ID, 1);
INSERT INTO Flist VALUES (:AID,:aname, :adata1, :adata2);
end
suspend;
end
← →
Johnmen © (2006-06-04 14:38) [2]
> unknown © (04.06.06 12:21) [1]
Чушь какая-то...:)
> SamProf ©
SELECT ID FROM Table WHERE name=:aname INTO :i;
...
>запись, в уоторой name= :anameесли такая запись существует,
А если таких записей >1 ?
← →
SamProf © (2006-06-04 14:44) [3]Спасибо! Я не особенно щарю в ключах....
Просто у меня возник вопрос, а как можно это дело убыстрить? может задать какойто ключ... и какой?
← →
SamProf © (2006-06-04 14:45) [4]Таковых записей 1!
И она полюбому уникальна!
← →
unknown © (2006-06-04 15:03) [5]
> Johnmen © (04.06.06 14:38) [2]
> Чушь какая-то...:)
Это почему это вдруг чушь???
Автор же великим и могучим языком написАл:
> Я хочу создать хранимую процедудуру, с входящими параметрами...
> эта процедура ищет в таблице запись, в уоторой name= :anameесли
> такая запись существует, то она изменяет только data2=:adata2,
> а остальные поля не трогает
> Если такой записи нет, то она добавляет запись...
> Не зависимо от того нашлась ли запись или нет нужно вернуть Id в aid.
Каков вопрос - таков и ответ.
> SamProf © (04.06.06 14:44) [3]
> SamProf © (04.06.06 14:45) [4]
Уникальный индекс надо на поле name
← →
SamProf © (2006-06-04 15:29) [6]
> Уникальный индекс надо на поле name
Извини за бредовый вопрос!
Primary key
или Uniques key
Просто в IB Expert это разные вкладки.....
← →
unknown © (2006-06-04 15:33) [7]
> SamProf © (04.06.06 15:29) [6]
unique
← →
atruhin © (2006-06-04 15:38) [8]
> [7] unknown © (04.06.06 15:33)
>unique
Да вы что? ID обычно и по условиям задачи - primary key, а unique он будет автоматически.
← →
unknown © (2006-06-04 16:21) [9]
> atruhin © (04.06.06 15:38) [8]
:) См. [5]
> Уникальный индекс надо на поле name
На ID, насколько я понимаю, у автора и так pk.
← →
atruhin © (2006-06-05 17:50) [10]
> [9] unknown © (04.06.06 16:21)
Сорри. Ошибся.
← →
PEAKTOP © (2006-06-05 21:14) [11]я бы сделал так ....
-----------------------------------
CREATE PROCEDURE SAMPROF_PROCEDURE (
ANAME VARCHAR(100),
ADATA1 TIMESTAMP,
ADATA2 TIMESTAMP
)RETURNS(
AID INTEGER
)
AS
BEGIN
IF(EXISTS(SELECT TBB.ID FROM Flist TBB WHERE (TBB.NAME = :aNAME)))THEN
SELECT FIRST 1 TB.ID FROM Flist TB WHERE (TB.NAME = :aNAME) INTO :aID;
ELSE
BEGIN
INSERT INTO Flist (ID, NAME, DATE1, DATE2) VALUES (:AID,:aname, :adata1, :adata2);
SELECT FIRST MAX(TBL.ID) FROM Flist TBL INTO :aID;
END
SUSPEND;
END
-------------------------------------
а на таблицу Flist навешал бы классический триггер
CREATE TRIGGER TRIG_FLIST_BI_000 FOR Flist
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
NEW.ID = GEN_ID( SOME_GENERATOR, 1);
END
← →
Кщд © (2006-06-06 07:44) [12]PEAKTOP © (05.06.06 21:14) [11]
INSERT INTO Flist (ID, NAME, DATE1, DATE2) VALUES (:AID,:aname, :adata1, :adata2);
SELECT FIRST MAX(TBL.ID) FROM Flist TBL INTO :aID;
гарантированно ли вернется ID именно этой вставки?
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.08.13;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.291 c