Форум: "Базы";
Текущий архив: 2003.04.28;
Скачать: [xml.tar.bz2];
ВнизВозврат данных из процедуры. Найти похожие ветки
← →
Z_man7777 (2003-04-10 15:35) [0]Здравствуйте, Уважаемые Мастера!!!
Я хочу написать хранимую процедуру в InterBase (FireBird-е), которая будет возвращать несколько количество записей. Можно ли такое реализовать? Если можно, то подскажите как или укажите, где можно найти информацию по моей проблеме.
Всем заранее Спасибо!!!
← →
Соловьев (2003-04-10 15:40) [1]
...
for
select...
do
begin
...
suspend;
end
...
ibase.ru и doc.get.ru и codenet.ru
← →
Z_man7777 (2003-04-10 15:48) [2]Значит, если я напишу так, как Вы написали, то есть:
for
select * from Table
do
begin
/*здесь мне не понятно что я должен сделать чтобы данные возвратились*/
end
into :k /*если я напишу так, что произойдет?*/
← →
Johnmen (2003-04-10 16:01) [3]Есть примеры :
Пуск->Программы->InterBase->Documentation->Interbase SQL Reference->CREATE PROCEDURE
← →
AlexSerp (2003-04-10 16:03) [4]Вот тебе пример процедуры
CREATE PROCEDURE ARC_DATA (
DATA_ARC DATE)
AS
declare variable n_sf integer;
begin
for
select n
from dok_sf
where opl=2 and data <=:data_arc
into :n_sf
do begin
insert into sbit_arc
select * from sbit where n_sf =:n_sf;
delete from sbit where n_sf =:n_sf;
end
insert into arc_date (data_arc) values (:data_arc);
end
← →
AlexSerp (2003-04-10 16:06) [5]Прошу пардону поторопился.
Та процедура ничего не возвращает.
Вот (правда это не я писал):
CREATE PROCEDURE SNB_TOV (
MES1 INTEGER,
GOD1 INTEGER,
DATA_N DATE,
DATA_NM DATE,
DATA_NM1 DATE,
DATA_K DATE,
NN INTEGER)
RETURNS (
TOV_NP VARCHAR (20),
TOV_NAME VARCHAR (50),
SUMTOV DOUBLE PRECISION,
SUMTOVFULL DOUBLE PRECISION,
SUMTAM DOUBLE PRECISION)
AS
declare variable TOV_N integer;
declare variable dok_N_val integer;
declare variable dok_N_skl integer;
declare variable dok_kurs double precision;
declare variable dok_N_SF integer;
BEGIN
for
select
t.N_P,
t.name,
sum(s.sm_rub),
t.n
from snab s left join tov t on s.n_tov=t.n
where (s.data<=:data_k and s.data>=:data_n and s.n_tam_dec>0 and tip_tov<100 )
group by t.name,t.n,t.N_P
Order by t.name
into
:TOV_NP,
:TOV_NAME,
:SUMTOV,
:TOV_N
do
BEGIN
select
sum(s.sm_rub)
from snab s
where (S.N_TOV=:TOV_N AND s.data<=:data_k and s.data>=:data_n and s.n_tam_dec>0 and tip_tov=100 )
INTO :SUMTAM;
IF (:SUMTAM IS NULL) THEN SUMTAM=0;
SUMTOVFULL=:SUMTOV+:SUMTAM;
IF (ABS(SUMTOV)>0.01) THEN suspend;
END
END
← →
Z_man7777 (2003-04-10 16:21) [6]!AlexSerp!
И что в результате получается (что возвращается)?
← →
Соловьев (2003-04-10 16:26) [7]
...
for
select...
into :<то что в returns>
do
begin
...
suspend;/*волшебное слово*/
end
...
← →
AlexSerp (2003-04-10 16:27) [8]Во-первых
RETURNS (
TOV_NP VARCHAR (20),
TOV_NAME VARCHAR (50),
SUMTOV DOUBLE PRECISION,
SUMTOVFULL DOUBLE PRECISION,
SUMTAM DOUBLE PRECISION)
Во-вторых, RTFM.
← →
AlexSerp (2003-04-10 16:29) [9]Извини, дорогой, все-таки вопросы надо задавать когда после прочтения документации и экспериментов ничего не получилось.
А тебе, похоже, даже лень мануал открыть.
← →
litr_spirta (2003-04-10 16:29) [10]Забыли пояснить, что потом надо не execute procedure _ТвояSP_,
а select * from _ТвояSP_
← →
Z_man7777 (2003-04-10 16:36) [11]Все большое спасибо!!!
Вразумили незнайке.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.04.28;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c