Это не работает. Может кто-нибудь помочь мне это исправить? - PullRequest
0 голосов
/ 11 апреля 2020

Я создал эту процедуру, но там говорилось: «PLS-00364: l oop индексная переменная« Использование DS недопустимо »и« ORA-00942: таблица или представление не существует ». Как я могу это исправить?

 create or replace procedure thangmax3(
        nam IN number)
    as
    begin
        nam:=&nam;
        dbms_output.put_line('DS 3 thang nhieu khach den o ksan nhat nam '||nam);
        for ds in (select d.thang, d.sokhach from (select extract(month from thoigiannhan)as thang,COUNT(mathuephong)sokhach from HR.thong_tin_thue_phong 
                                    where extract(year from thoigiantra)=nam 
                                    group by  extract(month from thoigiannhan)
                                    order by COUNT(mathuephong) DESC) d 
                        where rownum<=3)
        loop
            dbms_output.put_line('Thang: '||ds.thang||'     '||'So khach: '||ds.soluong);
        end loop;
    end;

1 Ответ

0 голосов
/ 11 апреля 2020

Тогда только «реальная» таблица, включенная в ваш код, является

hr.thong_tin_thue_phong

Поскольку вы предшествовали ее имени именем владельца (hr), я думаю, что вы в настоящее время не подключены как hr , Если это так, hr должен предоставить вам привилегию select, чтобы этот запрос работал.

Итак: подключитесь как hr и запустите

grant select on thong_tin_thue_phong to user_that_runs_that_pl/sql_block;

По поводу другой полученной ошибки: при вызове dbms_output.put_line внутри l oop вы ссылаетесь ds.soluong, но - его нет в запросе FOR l oop: у него есть thang и sokhach, поэтому - используйте их.


Также, если вы создала процедуру с параметром IN, вы не запрашиваете ее , используя переменную подстановки. Процедура будет такой:

create or replace procedure thangmax3(par_nam IN number)
  as
begin
  dbms_output.put_line('DS 3 thang nhieu khach den o ksan nhat nam '|| par_nam);
  for ds in (select d.thang, 
                    d.sokhach 
             from (select extract (month from thoigiannhan) as thang,
                          COUNT(mathuephong) sokhach 
                   from HR.thong_tin_thue_phong 
                   where extract (year from thoigiantra) = par_nam 
                   group by extract (month from thoigiannhan)
                   order by COUNT(mathuephong) DESC
                  ) d 
             where rownum<=3
            )
  loop
    dbms_output.put_line('Thang: '||ds.thang||'     '||'So khach: '||ds.sokhach);
  end loop;
end;

Вы бы назвали это

begin
  thangmax3(&nam);
end;
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...