Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.04;
Скачать: CL | DM;

Вниз

MSSQL==>ORACLE   Найти похожие ветки 

 
Chak ©   (2002-10-14 16:09) [0]

В MSSQL хранимая пр-ра возвращает строку с несколькими данными из таблицы, а в ORACLE не могу такого сделать, руки наверное не оттуда растут, одно значение - пожалуста, а вот несколько как?


 
Best Before 2024   (2002-10-14 16:11) [1]

Какая процедура, какие данные, как возвращает.
Пишите подробнее, трам-пам-пам!


 
chak ©   (2002-10-14 16:25) [2]

Вот функция suma_pokazn MSSQL


CREATE PROCEDURE suma_pokazn
@d datetime,
@kod_op int
AS

IF @kod_op=2
BEGIN
SELECT
SUM(N11) AS N11, SUM(N22) AS N22
FROM Op_Punkt
WHERE Data=@d AND kod_op<=2
END
ELSE
BEGIN
SELECT
SUM(N11) AS N11, SUM(N22) AS N22
FROM Op_Punkt
WHERE Data=@d AND kod_op=@kod_op
END
GO


а вот функция в ORACLE:

CREATE OR REPLACE procedure suma_pok(
data_ IN Date,
kod_op_ IN NUMBER)
is
BEGIN
IF kod_op_=2 THEN
BEGIN
SELECT SUM(N11) N11_, SUM(N22) N22_ //вот здесь выдается ошибка - PLS-00428: an INTO clause is expected in this SELECT statement
FROM TOP_Punkt
WHERE Data=data_ AND kod_op_<=2;
END;
ELSIF kod_op_<>2 THEN
BEGIN
SELECT
SUM(N11) AS N11, SUM(N22) AS N22
FROM TOP_Punkt
WHERE Data=data AND kod_op=kod_op_;
END;
END IF;
END suma_pok;
/




 
Johnmen ©   (2002-10-14 16:38) [3]

Все верно... Результаты запроса тебе нужны ? Думаю - да ! :)
Так указывай, куда их складывать - INTO !


 
chak ©   (2002-10-14 16:48) [4]

Пробовал и с INTO вот так

SELECT SUM(N11) INTO N11_, SUM(N22) INTO N22_
FROM TOP_Punkt
WHERE Data=data_ AND kod_op<=2;
GROUP BY N11, N22;


но перед SUM(N22) INTO N22_ возникает очередная ошибка - PL/SQL: ORA-00934: group function is not allowed here


 
Geka   (2002-10-14 16:54) [5]

А без GROUP BY ?


 
chak ©   (2002-10-14 16:56) [6]

И без GROUP BYаналогично

PL/SQL: ORA-00934: group function is not allowed here


 
chak ©   (2002-10-14 17:09) [7]

Ну как же правильно сдетать?


 
Johnmen ©   (2002-10-14 17:15) [8]

Посмотреть хелп на синтаксис процедурного селекта... :)


 
chak ©   (2002-10-14 17:25) [9]

Да точно, я там и искал, и нашол только-что.
Нужно сначала перечислить что выбирать из таблицы, потом INTO и
здесь только переменные в которым прысваивать результаты.

Спасибочки.


 
Юрий Жуков ©   (2002-10-14 17:57) [10]

Может быть так ?

SELECT
SUM(N11) , SUM(N22)
INTO
N11_, N22_
FROM
TOP_Punkt
WHERE
Data=data_ AND kod_op<=2;
GROUP
BY N11, N22;


 
petr_v_a ©   (2002-10-14 18:07) [11]

Не умеет Oracle возвращать из процедуры несколько строк, умеет только курсоры начиная с версии 8.1.5


 
Duce ©   (2002-10-14 18:22) [12]

к petr_v_a © (14.10.02 18:07)
Набор строк возвращается и в 7-ке. Как OUT-параметр. Под него
в БДЕ заведен и тип ftCursor


 
chak ©   (2002-10-14 19:02) [13]

==> petr_v_a
Так никто и не говорит о двух и более строках, нужно в одной строке но несколько значений,
или это одно и тоже?
Чет я совсем ничего непонимаю.


 
Наталия ©   (2002-10-15 06:34) [14]

А выходные параметры не пробовал указывать?
PROCEDURE UOP_CALC_BKR(formname in varchar2
,tablename in varchar2
,tableid in number
,triggertype in varchar2
,f_val out Varchar2_32_Table
,f_nam out Varchar2_32_Table
,errm out varchar2) is
...


 
perov ©   (2002-10-15 07:40) [15]

процедура (1), возвращающая строку/строки из нескольких значений
и процедура (2), возвращающая несколько значений - это разные процедуры

описания процедур (2) см
> Наталия © (15.10.02 06:34)


результат процедур (1) (точнее функций, над процедурам я не пробовал) можно вытаскивать select"ом

если интересно, могу привести пример.


 
chak ©   (2002-10-15 10:03) [16]

Пример лишним никогда не бывает,
приведи если не трудно здесь а можно и на
chak@udpolo.txnet.com


 
perov ©   (2002-10-15 11:19) [17]

1. определяем возвращаемые поля как объект
create or replace type tRec as object (num number, s varchar2(255))
функция будет возвращать число и строку
2. определяем таблицу каторая содержит объекты типа tRec
create or replace type tTbl as table of tRec
3. создаем функцию, которая будет возвращать таблицу (функция самая наипростейшая)
create or replace function TestTbl return Ttbl as
res TTbl := TTbl();
begin
Res.Extend;
res(1) := tRec(1, "test");
return res;
end;
4. сам селект
select * from table(cast (TestTbl as TTbl))



Страницы: 1 вся ветка

Текущий архив: 2002.11.04;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.013 c
3-11114
jen_bond
2002-10-12 14:16
2002.11.04
Узнать разницу между датами


14-11443
vopros
2002-10-10 11:57
2002.11.04
Когда нам дадут медаль?


1-11268
Призрак
2002-10-22 18:50
2002.11.04
Свой текст в TWebBrowser


4-11536
Serd_hhc
2002-09-21 15:39
2002.11.04
Для Гуру....


1-11147
Stocker!
2002-10-24 10:13
2002.11.04
TImage и таблица Word или Excel