|
Не пойму логику in/out параметров процедуры
|
|||
---|---|---|---|
#18+
По первому взгляду вроде бы как все просто и однозначно. Если IN — значит можно использовать справа от знака равенства. Если OUT — значит можно использовать слева от знака равенства. Если IN OUT — можно использовать в любом месте. Но есть непонятные особенности. Код: plsql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 15:12 |
|
Не пойму логику in/out параметров процедуры
|
|||
---|---|---|---|
#18+
Alibek B. Если IN — значит можно использовать справа от знака равенства. Если OUT — значит можно использовать слева от знака равенства. Если IN OUT — можно использовать в любом месте. не так. грубо говоря, внутри процедуры IN-параметр работает как константа (можно читать, нельзя изменять), OUT (+IN OUT) - как переменная (можно читать и изменять). ну и помедитируйте над таким вызовом: Код: plsql 1.
и таким: Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 15:24 |
|
Не пойму логику in/out параметров процедуры
|
|||
---|---|---|---|
#18+
Alibek B. Если OUT — значит можно использовать слева от знака равенства. А миф порождён ошибкой древней документации:7.3.4 https://docs.oracle.com/cd/A57673_01/DOC/server/doc/PLS23/ch7.htm#toc071 OUT Mode An OUT parameter lets you return values to the caller of a subprogram. Inside the subprogram, an OUT parameter acts like an uninitialized variable . Therefore, its value cannot be assigned to another variable or reassigned to itself. For instance, the following assignment statement causes a compilation error: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
Все страшилки - неправда: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 15:40 |
|
Не пойму логику in/out параметров процедуры
|
|||
---|---|---|---|
#18+
Другими словами: IN можно только читать, на входе в процедуру он сохраняет передаваемое в процедуру значение.. OUT можно использовать произвольно, но на входе в процедуру он равен NULL. IN OUT можно использовать произвольно, на входе в процедуру он сохраняет передаваемое в процедуру значение. Так? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 16:30 |
|
Не пойму логику in/out параметров процедуры
|
|||
---|---|---|---|
#18+
Alibek B. OUT можно использовать произвольно, но на входе в процедуру он равен NULL. Надежнее рассматривать как неинициализированную переменную, не рассчитывая на null. Alibek B. IN OUT можно использовать произвольно, на входе в процедуру он сохраняет передаваемое в процедуру значение. Рассматривайте как глобальную переменную, определенную в вызывающем коде. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 16:37 |
|
Не пойму логику in/out параметров процедуры
|
|||
---|---|---|---|
#18+
andrey_anonymous Рассматривайте как глобальную переменную, определенную в вызывающем коде. Как бы наоборот, IN OUT по умолчанию передается по значению, а вот IN по ссылке)) Передача параметров в PL/SQL подпрограммы. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 16:46 |
|
Не пойму логику in/out параметров процедуры
|
|||
---|---|---|---|
#18+
iOracleDev andrey_anonymous Рассматривайте как глобальную переменную, определенную в вызывающем коде. Как бы наоборот, IN OUT по умолчанию передается по значению, а вот IN по ссылке)) Во-первых, оно сложнее с умолчаниями. А во-вторых, в качестве первого приближения к правильному применению вполне годится. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 17:11 |
|
Не пойму логику in/out параметров процедуры
|
|||
---|---|---|---|
#18+
Alibek B. Другими словами: ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 17:28 |
|
Не пойму логику in/out параметров процедуры
|
|||
---|---|---|---|
#18+
andrey_anonymous Alibek B. OUT можно использовать произвольно, но на входе в процедуру он равен NULL. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 17:31 |
|
Не пойму логику in/out параметров процедуры
|
|||
---|---|---|---|
#18+
andrey_anonymous Во-первых, оно сложнее с умолчаниями. Ну да, как фишка ляжет)) andrey_anonymous А во-вторых, в качестве первого приближения к правильному применению вполне годится. Вот более близкое и понятное приближение PL-SQL-Use-IN-OUT-Parameter ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 17:36 |
|
Не пойму логику in/out параметров процедуры
|
|||
---|---|---|---|
#18+
iOracleDev, - официальная документация почти всегда лучше для 12.2 её более-менее привели в порядок - даже можно понять, почему не работает Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
и даже в отношении out-параметров не забыто о : https://docs.oracle.com/en/database/oracle/oracle-database/12.2/lnpls/plsql-subprograms.html#GUID-518B8827-26CC-4734-B799-ACB038185638 If the subprogram ends with an exception, then the value of the actual parameter is undefined. Чему ранее посвящались самостоятельные образовательные статьи. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 18:13 |
|
Не пойму логику in/out параметров процедуры
|
|||
---|---|---|---|
#18+
С передачей по ссылке/значению не поясните, правильно ли я понял? В следующем примере: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Насколько "безопасно" в качестве входного параметра передавать мембера выходного параметра? Если IN передается по ссылке ( 22033371 ), то в прикладных языках программирования это было бы сомнительным местом, которое лучше на всякий случай переделать для исключения неопределенности. Или по ссылке передается только IN OUT? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2019, 11:17 |
|
|
start [/forum/topic.php?fid=52&msg=39899031&tid=1881774]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 161ms |
0 / 0 |