Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-91502
anbezr
2003-04-10 16:21
2003.04.28
Как перетащить на другой комп мой репозиторий


4-91581
!Eraser
2003-02-28 10:10
2003.04.28
Ослежка реестра и файлов


4-91590
Nimda2000
2003-03-02 15:49
2003.04.28
Кодировка


3-91185
sergun
2003-04-09 22:10
2003.04.28
Вопрос по полям


14-91458
Жук
2003-04-08 15:52
2003.04.28
[503] Service Unavailable





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский