Запрос и хранимая процедура
От: CTAPOCTA87 Россия  
Дата: 18.04.08 05:57
Оценка:
Здравствуйте!

Помогите пожалуйста!
Проблема в следующем: есть абсолютно работающий запрос, а при помещении его в SP
Oracle 9 выдает ошибки.

23/2 PL/SQL: ORA-00933: SQL command not properly ended
3/5 PL/SQL: SQL Statement ignored
24/5 PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:
begin case declare end exception exit for goto if loop mod
null pragma raise return select update while with
<an identifier> <a double-quoted delimited-identifier>
<a bind variable> << close current delete fetch lock insert
open rollback savepoint set sql execute commit forall merge
<a single-quoted SQL string> pipe


вот процедура
CREATE OR REPLACE PROCEDURE ANDREY.ProblemReport(Date1 IN VARCHAR2, Date2 IN VARCHAR2) IS
BEGIN
SELECT
element, cell, datetime,
ROUND(decode(h2106,0,0,h2142/h2106*100),3) c_drp_r,
DECODE((h2090+h2096+h2097),0,0,round((h2120+h2131+h2132)/(h2090+h2096+h2097)*100,3)) t_br_nrr,
ROUND(h2277*48/(100*60*60),3) T_TR,
ROUND(h7102*48/(100*60*60),3) TF_TR,
ROUND(h7103*48/(100*60*60),3) TH_TR,
DECODE(h2277,0,0,ROUND(h7103/h2277*100,3)) HR_USG,
h2279 cnf_trx,
h2280 av_trx,
er.b01 gos_tr,
DECODE(er.b01,0,0,ROUND(h2277*48/(100*60*60)/er.b01*100,3)) cell_utl,
DECODE(h2185,0,0,(DECODE(h2049,0,0,(DECODE(h2089,0,0,round(h2198/h2185*(1-h2070/h2049)*h2105/h2089*100,3)))))) cssr
FROM cellstats c, erlang er
WHERE
c.datetime >= to_date(Date1,'dd-mm-yyyy hh24:mi')--to_date('10-04-2008 12:00','dd-mm-yyyy hh24:mi')--to_date(Date1,'dd.mm.yyyy h24:mi')
AND c.datetime < to_date(Date2,'dd-mm-yyyy hh24:mi') --to_date('11-04-2008 12:00','dd-mm-yyyy hh24:mi')--to_date(Date2,'dd.mm.yyyy h24:mi')
AND c.h2277 > 0 AND c.h2279 <> c.h2280
AND er.n = ROUND(c.h2166/100,0)
ORDER BY TRUNC(datetime), cell, datetime

END;
/

Помогите please
За ранее благодарен.
Re: Запрос и хранимая процедура
От: Niteshade Россия  
Дата: 18.04.08 06:20
Оценка:
Здравствуйте, CTAPOCTA87, Вы писали:

CTA>Помогите пожалуйста!

CTA>Проблема в следующем: есть абсолютно работающий запрос, а при помещении его в SP
CTA>Oracle 9 выдает ошибки.

либо используйте секцию into, либо курсор
при переходе с одной СУБД (MS SQL?) на другую, ознакомление с документацией целевой СУБД пока никого не убило
Re: Запрос и хранимая процедура
От: wildwind Россия  
Дата: 18.04.08 10:20
Оценка:
Здравствуйте, CTAPOCTA87, Вы писали:

CTA>Проблема в следующем: есть абсолютно работающий запрос, а при помещении его в SP

CTA>Oracle 9 выдает ошибки.

1. Для помещения кода в сообщение пользуйся тегами [sql].

3. RTFM SELECT INTO Statement
Re[2]: Запрос и хранимая процедура
От: CTAPOCTA87 Россия  
Дата: 21.04.08 03:44
Оценка:
Здравствуйте, wildwind, Вы писали:

W>Здравствуйте, CTAPOCTA87, Вы писали:


CTA>>Проблема в следующем: есть абсолютно работающий запрос, а при помещении его в SP

CTA>>Oracle 9 выдает ошибки.

W>1. Для помещения кода в сообщение пользуйся тегами [sql].


W>3. RTFM SELECT INTO Statement

Все равно те же ошибки
Re[3]: Запрос и хранимая процедура
От: Niteshade Россия  
Дата: 21.04.08 04:03
Оценка:
Здравствуйте, CTAPOCTA87, Вы писали:

CTA> Все равно те же ошибки


код процедуры и ошибку, пожалуйста
Re: Запрос и хранимая процедура
От: Перец  
Дата: 21.04.08 04:53
Оценка:
Здравствуйте, CTAPOCTA87, Вы писали:

Молодой человек, а что она, эта процедура, делает? Собственно все что в ней есть — это запрос в никуда. Че надо то? Если эта процедура должна генерировать отчет, то в какое место?

К примеру можно делать отчет для веба так:

create procedure make_test_report()
is
begin
  htp.p('<table>');
  for r in (select level as l, chr(level + 192) as ch from dual connect by level <= 33)
  loop
    htp.p('<tr><td>' || r.l || '</td><td>' || r.ch || '</td></tr>');
  end loop;
  htp.p('</table>');
end;


Или так

create procedure make_test_report()
is
  cursor c is select level as l, chr(level + 192) as ch from dual connect by level <= 33;
 
begin
  htp.p('<table>');
  for r in c
  loop
    htp.p('<tr><td>' || r.l || '</td><td>' || r.ch || '</td></tr>');
  end loop;
  htp.p('</table>');
end;


или так

create procedure make_test_report()
is
  cursor c is select level as l, chr(level + 192) as ch from dual connect by level <= 33;
  r c%rowtype; 
begin
  htp.p('<table>');
  open c;
  fetch c into r;
  loop
    exit when c%notfound;
    htp.p('<tr><td>' || r.l || '</td><td>' || r.ch || '</td></tr>');
    fetch c into r;
  close c;
  htp.p('</table>');
end;



или так

create procedure make_test_report()
is
  cursor c is select level as l, chr(level + 192) as ch from dual connect by level <= 33;
  l number;
  ch varchar2(1);
begin
  htp.p('<table>');
  open c;
  fetch c into l, ch;
  loop
    exit when c%notfound;
    htp.p('<tr><td>' || l || '</td><td>' || ch || '</td></tr>');
    fetch c into r;
  close c;
  htp.p('</table>');
end;



или так

create procedure make_test_report()
is
  cursor c is select level as l, chr(level + 192) as ch from dual connect by level <= 33;
  l number;
  ch varchar2(1);
begin
  htp.p('<table>');
  open c;
  fetch c into l, ch;
  loop
    exit when c%notfound;
    htp.p('<tr><td>' || l || '</td><td>' || ch || '</td></tr>');
    fetch c into r;
  close c;
  htp.p('</table>');
end;
Re[2]: Запрос и хранимая процедура
От: Перец  
Дата: 21.04.08 04:54
Оценка:
Здравствуйте, Перец, Вы писали:

Последнее продублированно ибо чета так вышло.
Re[2]: Запрос и хранимая процедура
От: Перец  
Дата: 21.04.08 09:14
Оценка:
Здравствуйте, Перец, Вы писали:

Ой. Вот он. Вот. Пришел наш телепат. Вы наверное хотели сделать процедуру возвращающую вам таблицу(хотя как процедура должна возвращать значение, хоть бы и табличного типа, ума не приложу). Как в MS SQL. Ну тогда надо так.


create type type_for_function_for_getting_data_for_report is object
(l number, ch varchar2(1)); --:)
create function get_data_for_report() type_for_function_for_getting_data_for_report piplined
is
 cursor c is select level as l, chr(l+192) as ch from dual connect by level <= 33; 
begin
  for r in c
  loop
    pipe row (type_for_function_for_getting_data_for_report(r.l, r.ch));
  end loop; 
end;


Ну или че та в этом духе.
Re[3]: Запрос и хранимая процедура
От: Niteshade Россия  
Дата: 21.04.08 09:49
Оценка:
Здравствуйте, Перец, Вы писали:

П>Здравствуйте, Перец, Вы писали:


П>Ой. Вот он. Вот. Пришел наш телепат. Вы наверное хотели сделать процедуру возвращающую вам таблицу(хотя как процедура должна возвращать значение, хоть бы и табличного типа, ума не приложу). Как в MS SQL. Ну тогда надо так.


для pipelined не обязательно определять тип уровня sql
да и тип table of + bulk collect будет быстрее)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.