Помогите с запросиком разобраться.

CH1PSET1
Дата: 27.05.2012 20:06:53
Здравствуйте ребят)
Пишу хранимую процедуру на вставку значений. Ничего не могу понять, почему то не создается, помогите разобраться пожалуйста.

Есть таблица Thorse
В ней 3 поля: Id_Horse, Name, Age

Запрос

CREATE PROCEDURE INS_VED (sname varchar(50), sage integer))

AS
DECLARE VARIABLE ID_H INTEGER;
IF (NOT EXISTS (SELECT * FROM thorse WHERE name = :sname  AND age = :sage))

THEN

INSERT INTO thorse(name, age) VALUES (:sname, :sage);

SELECT ID_Horse FROM thorse WHERE name=:sname and age=:sage INTO :id_H; 


Пишет ошибку в пятой строке.. проверил, не знаю в чем проблема. Но думаю какой то пустяк. Спасибо.
CH1PSET1
Дата: 27.05.2012 20:08:45
Забыл сказать, InterBase 7
Таблоид
Дата: 27.05.2012 20:12:49
CH1PSET1,

1) где BEGIN, который после 'AS' и деклараций (если они есть) ?
2) где вообще полный текст ХП ?
3) ваша ХП будет допускать дубли при работе >=2 усеров. Вместо 'if (not exists(...)) then' создайте уникальный индекс по этим полям и уберите это условие; заключите всё в begin...end и ошибку вставки дубля глушите в when-разделе.
CH1PSET1
Дата: 27.05.2012 20:19:28
Забыл совсем про begin(

Прошу прощения, но я не знаю, что такое Хп(
Думаю это полный код.

Я исправил немного:

CREATE PROCEDURE INS_VED (sname varchar(50), sage integer)

AS
DECLARE VARIABLE ID_H INTEGER;
begin
IF (NOT EXISTS (SELECT * FROM thorse WHERE name = :sname  AND age = :sage))

THEN

INSERT INTO thorse(name, age) VALUES (:sname, :sage);

SELECT ID_Horse FROM thorse WHERE name=:sname and age=:sage INTO :id_H;
end


Теперь пишет: Error at line 1= unsucefull metadata update
procedure ins_ved already exists
CH1PSET1
Дата: 27.05.2012 20:20:35
А насчет усеров не важно. Мне в жизни не разобраться)
Таблоид
Дата: 27.05.2012 20:31:02
CH1PSET1
procedure ins_ved already exists
потому что надо так:
create or alter procedure ...
ЗЫ. ХП = хранимая процедура
arni
Дата: 27.05.2012 21:11:28
Таблоид,
сомневаюсь, чтоб такое ископаемое как ib7 умел "create or alter procedure"


CH1PSET1,
исправь create на alter
Таблоид
Дата: 27.05.2012 21:13:07
arni,

разумеется, я мог ошибиться, т.к. давал совет "вслепую"; мне это "добро" (IB) и даром не нужно.
WildSery
Дата: 27.05.2012 21:34:05
Таблоид,

Правильно писать "я ошибся", а не "я мог ошибиться"
Таблоид
Дата: 27.05.2012 21:50:10
ну, ответьте ему кто-нибудь, у кого этот самый IB7 установлен. Видно же, что ему "стартовый пинок" нужен, на ерунде спотыкается :-)