Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Не получается написать хранимую процедуру. / 5 сообщений из 5, страница 1 из 1
04.10.2015, 11:21
    #39067821
bsi82
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается написать хранимую процедуру.
Доброго всем времени!
Фаербёрд 2.5.
Пытаюсь написать хранимую процедуру. Суть не затейлива: отыскать в таблице по условиям такую же запись.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
CREATE OR ALTER PROCEDURE check_double (in_ID integer)
AS
declare variable ap varchar(50);
declare variable session varchar(50);
declare variable initialsession varchar(50);
declare variable number varchar(50);
declare variable amount varchar(50);
declare variable filename varchar(50);
declare variable cnt integer;
BEGIN
select p.ap,p.initialsession,p.session, p.number, p.amount,p.filename into :ap,:initialsession,:session,:number,:amount,:filename
from payments p where p.id=:in_id;
select count(p.id) into :cnt
from payments p join status s on p.id=s.id_payment
where p.id<>:in_id
and p.ap=:ap
and p.session=:session
and p.initialsession=:initialsession
and p.number=:number
and p.amount=:amount
and p.filename=:filename
and s.status<>'NEW';
if cnt>0 then
update status set status='DOUBLE' where id_payment=:in_id;
END^


При попытке выполнить все это хозяйство, получаю:
: PrepareStatement :
-Dynamic SQL Error
-SQL error code = -104
-Token unknown - line 1, column 1
-BEGIN
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
BEGIN
select p.ap,p.initialsession,p.session, p.number, p.amount,p.filename into :ap,:initialsession,:session,:number,:amount,:filename
from payments p where p.id=:in_id;
select count(p.id) into :cnt
from payments p join status s on p.id=s.id_payment
where p.id<>:in_id
and p.ap=:ap
and p.session=:session
and p.initialsession=:initialsession
and p.number=:number
and p.amount=:amount
and p.filename=:filename
and s.status<>'NEW';
if cnt>0 then
update status set status='DOUBLE', STAMP=date where id_payment=:in_id;
END^



Что ему не нравиться нравится?
...
Рейтинг: 0 / 0
04.10.2015, 11:52
    #39067830
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается написать хранимую процедуру.
bsi82Что ему не нравиться?
Используй isql.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.10.2015, 11:53
    #39067831
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается написать хранимую процедуру.
Ну для начала секции From и into поменять местами

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select p.ap,p.initialsession,p.session, p.number, p.amount,p.filename 
from payments p where p.id=:in_id;
  into :ap,:initialsession,:session,:number,:amount,:filename

select count(p.id) from payments p join status s on p.id=s.id_payment
where p.id<>:in_id
and p.ap=:ap
and p.session=:session
and p.initialsession=:initialsession
and p.number=:number
and p.amount=:amount
and p.filename=:filename
and s.status<>'NEW'
 into :cnt
;
...
Рейтинг: 0 / 0
04.10.2015, 20:49
    #39067961
Polesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается написать хранимую процедуру.
Привет.

select p.ap,p.initialsession,p.session, p.number, p.amount,p.filename into :ap,:initialsession,:session,:number,:amount,:filename
from payments p where p.id=:in_id;
into пишется в самом конце
Код: plsql
1.
2.
3.
4.
5.
SELECT .....
  FROM .....
 WHERE .....
     :
  INTO .....



if cnt>0 then
Любое логическое условие заключается в скобки:
Код: plsql
1.
IF (<logical condition>) THEN .....



С уважением, Polesov.
...
Рейтинг: 0 / 0
05.10.2015, 14:28
    #39068442
bsi82
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается написать хранимую процедуру.
create procedure CHECK_DOUBLE(
(
IN_ID INTEGER
)

AS
declare variable ap varchar(50);
declare variable session varchar(50);
declare variable initialsession varchar(50);
declare variable number varchar(50);
declare variable amount varchar(50);
declare variable filename varchar(50);
declare variable cnt integer;
BEGIN
select p.ap,p.initialsession,p.session, p.number, p.amount,p.filename
from payments p where p.id=:in_id
into :ap,:initialsession,:session,:number,:amount,:filename;
select count(p.id)
from payments p join status s on p.id=s.id_payment
where p.id<>:in_id
and p.ap=:ap
and p.session=:session
and p.initialsession=:initialsession
and p.number=:number
and p.amount=:amount
and p.filename=:filename
and s.status<>'NEW'
into :cnt;
if (cnt>0) then
update status set status='DOUBLE' where id_payment=:in_id;

END

В таком виде благополучно все съело.
Спасибо огромное! Просто привыкший я к plsql
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Не получается написать хранимую процедуру. / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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