powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Не получается написать хранимую процедуру.
5 сообщений из 5, страница 1 из 1
Не получается написать хранимую процедуру.
    #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
Не получается написать хранимую процедуру.
    #39067830
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bsi82Что ему не нравиться?
Используй isql.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Не получается написать хранимую процедуру.
    #39067831
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
Не получается написать хранимую процедуру.
    #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
Не получается написать хранимую процедуру.
    #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
5 сообщений из 5, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Не получается написать хранимую процедуру.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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