Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / if else / 7 сообщений из 7, страница 1 из 1
18.06.2018, 17:46
    #39662102
elimpion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
if else
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
function ActionDate(
    aContractId in integer,
    aDate in date,
    aTypeDate in integer default 1
  ) return date
  is
    vResult date;
  begin
    if aTypeDate = 2 then
    (select OperDate into vResult from
    (select a.OperDate
      from BrsActions a
      where a.ContractID = aContractId
        and a.StornDate is Null
        and a.Operdate<aDate
      order by OperDate desc)
      where RowNum = 1;
    return vResult;)

    else aTypeDate = 1 then
    (select BalanceDate into vResult from
    (select o.BalanceDate
      from BrsOpers o
      inner join BrsActions a on (a.actionid = o.actionid)
      where a.ContractID = aContractId
        and a.StornDate is Null
        and o.BalanceDate<aDate
      order by BalanceDate desc)
      where RowNum = 1;
    return vResult;)
    end; 
  exception
    when NO_DATA_FOUND then
      return null;
  end;




При выполнение запроса возникают ошибки


Error: PLS-00103: Encountered the symbol "SELECT" when expecting one of the following:
Error: PLS-00103: Encountered the symbol "RETURN"

Что не так в запросе?
...
Рейтинг: 0 / 0
18.06.2018, 17:52
    #39662103
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
if else
вы где такого синтаксиса насмотрелись?
elimpion
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
function ActionDate(
    aContractId in integer,
    aDate in date,
    aTypeDate in integer default 1
  ) return date
  is
    vResult date;
  begin
    if aTypeDate = 2 then
    (select OperDate into vResult from
    (select a.OperDate
      from BrsActions a
      where a.ContractID = aContractId
        and a.StornDate is Null
        and a.Operdate<aDate
      order by OperDate desc)
      where RowNum = 1; --???
    return vResult;) --???

    else aTypeDate = 1 then
    (select BalanceDate into vResult from
    (select o.BalanceDate
      from BrsOpers o
      inner join BrsActions a on (a.actionid = o.actionid)
      where a.ContractID = aContractId
        and a.StornDate is Null
        and o.BalanceDate<aDate
      order by BalanceDate desc)
      where RowNum = 1; --???
    return vResult;) --???
    end; 
  exception
    when NO_DATA_FOUND then
      return null;
  end;




При выполнение запроса возникают ошибки


Error: PLS-00103: Encountered the symbol "SELECT" when expecting one of the following:
Error: PLS-00103: Encountered the symbol "RETURN"

Что не так в запросе?
...
Рейтинг: 0 / 0
18.06.2018, 17:53
    #39662104
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
if else
elimpion,

скобки круглые и точки-с-запятой внимательнее расставьте...
...
Рейтинг: 0 / 0
18.06.2018, 17:53
    #39662105
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
if else
elimpionЧто не так в запросе?Используемый язык нужно хоть немного знать, а не фантазировать на лету, изрыгая на форум свой поток сознания.
...
Рейтинг: 0 / 0
18.06.2018, 18:03
    #39662109
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
if else
elimpion,

и с типом условного оператора разберитесь....
если используете if-then-else, то после else должен быть некий выполняемый оператора, а не проверка условия.
если в else нужно проверить дополнительное условие, то форма условного оператора должна быть if-then- ELSIF -then-else...
...
Рейтинг: 0 / 0
18.06.2018, 18:10
    #39662113
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
if else
elimpion,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
SQL> declare
  2  function ActionDate(
  3      aTypeDate in integer default 1
  4    ) return date
  5    is
  6      vResult date;
  7    begin
  8      if aTypeDate = 2 then
  9         select max(hiredate) into vResult from emp where job='CLERK';
 10      elsif aTypeDate = 1 then
 11         select max(hiredate) into vResult from emp where job='MANAGER';
 12      else
 13        null; --raise или что-там надо
 14      end if;
 15    return vResult;
 16  end ActionDate;
 17  begin
 18   dbms_output.put_line('1 '||ActionDate(1));
 19   dbms_output.put_line('2 '||ActionDate(2));
 20  end;
 21  /
1 09.06.81
2 12.01.83

PL/SQL procedure successfully completed.



.....
stax
...
Рейтинг: 0 / 0
18.06.2018, 18:12
    #39662115
elimpion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
if else
Щукина Аннаelimpion,

и с типом условного оператора разберитесь....
если используете if-then-else, то после else должен быть некий выполняемый оператора, а не проверка условия.
если в else нужно проверить дополнительное условие, то форма условного оператора должна быть if-then- ELSIF -then-else...
спасибо
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / if else / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]