Написать процедуру Oracle - PullRequest
0 голосов
/ 23 июня 2018

Я должен создать процедуру оракула для отображения списка лиц (парламентариев) с индексом для кортежей.

Пока я написал этот фрагмент кода (я не реализовал индекс)

create or replace procedure parlamentarieslist as
    begin

    select
        ssn,
        name, 
        surname,


    from  
        parlimentaries p, 
        mandate m 
    where 
        p.ssn = m.parlamentaries AND m.legislature= (select
        max(legislature) "m" 
        from mandate);
end parlamentarieslist;

Однако, оракул, дай мне эти ошибки

 Error(5,3): PL/SQL: SQL Statement ignored
 Error(12,3): PL/SQL: ORA-00936: missing expression

Почему?

1 Ответ

0 голосов
/ 23 июня 2018

Как я уже упоминал ранее в части комментариев, проблема связана с

  • отсутствующим INTO предложением
  • существующей опечаткой ( запятая ) после столбца фамилии в верхнем списке выбора.

В основном, процедуры используются для возврата одного столбца или одной строки, и в результате операторы SELECT могут быть возвращенывыводить параметры по предложению INTO .Но, если вы хотите вернуть список лиц (из нескольких строк), может подойти следующий стиль:

    SQL> set serveroutput on;
    SQL> create or replace procedure parlamentarieslist as
    begin
     for c in
     (  
     select p.ssn, p.name, p.surname,
            max(m.legislature) over (partition by p.ssn ) m
       from parlimentaries p inner join mandate m
         on ( p.ssn = m.parlamentaries )
      order by m.legislature desc
     )
     loop
      dbms_output.put_line(' SSN : '||c.ssn||' Name : '||c.name||' Surname : '||c.surname); 
     end loop;  
    end parlamentarieslist;
    /
    SQL> exec parlamentarieslist;

Где Использовать SQL с явным стилем ANSI JOIN вместо устаревшей запятой с разделениемJOIN стиль.

...