Присвойте значение переменной в RETURN PL / SQPL - PullRequest
0 голосов
/ 25 апреля 2019

Есть ли способ добиться этого в оракуле PL / SQL?

    RETURN (return_status:=1);

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

   return_status := 1;
   RETURN (return_status);

Ответы [ 4 ]

2 голосов
/ 25 апреля 2019

Когда мы выполняем RETURN, процедура заканчивается в этой точке, и поток управления переходит к вызывающей программе. Так что в этой конструкции не будет никакой ценности ...

 RETURN (return_status:=1);

… потому что ничто в программном модуле не может действовать на return_status после ВОЗВРАТА.

это функция, а return_status это параметр OUT

В этом корень вашей проблемы: плохой дизайн. Либо возвращайте значение, либо используйте его в качестве параметра OUT, но не оба. В PL / SQL принята практика, когда функция возвращает значение и не имеет параметров OUT. Только процедуры (которые не имеют RETURN) имеют параметры OUT.

Итак, вы можете выбрать:

  1. return 1 и не имеют параметра OUT
  2. установить параметр OUT = 1 и вернуть что-то еще
  3. вместо этого сделайте процедуру
0 голосов
/ 25 апреля 2019

Функции с параметрами OUT разрешены, но пахнут неправильно.

0 голосов
/ 25 апреля 2019

AFAIK, вы не можете присвоить значение в операторе Oracle FUNCTIONS RETURN.

В Oracle Docs синтаксис должен быть

RETURN [[(] выражение [)]];

Для выражения см. Выражения

Единственное решение, которое я могу придумать, основываясь на ваших требованиях (1 условие вместо 2), использует case expression. Что-то вроде ниже (если у вас есть какие-либо условия)

RETURN
    CASE when return_status is not null  
         THEN 1
0 голосов
/ 25 апреля 2019

Я не понимаю, в чем проблема?

Если вы хотите вернуть значение return_status, тогда второй вариант вполне подойдет (если вы действительно выполняете жестко заданное назначение, вы можете просто вернуть 1.

И я подумал, что, возможно, у вас действительно есть внешняя переменная return_status, для которой вы пытаетесь изменить значение, вызывая эту функцию. В этом случае используйте процедуру, и пусть return_status будет переменной IN OUT (может быть, даже просто OUT).

...