|
|
|
а че, так можно было ?
|
|||
|---|---|---|---|
|
#18+
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ткните меня в доки, где описано такое поведение я всю жизь был уверен что оно immutable ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2017, 16:23 |
|
||
|
а че, так можно было ?
|
|||
|---|---|---|---|
|
#18+
nxx Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ткните меня в доки, где описано такое поведение я всю жизь был уверен что оно immutableвсегда так делал а чё? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2017, 16:43 |
|
||
|
а че, так можно было ?
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2017, 16:45 |
|
||
|
а че, так можно было ?
|
|||
|---|---|---|---|
|
#18+
nxx, а что тут странного? я наоборот (без доки) считю ii переменной тіпа %rowtype ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2017, 16:47 |
|
||
|
а че, так можно было ?
|
|||
|---|---|---|---|
|
#18+
nxx, как перевести на русский immutable? Если как обязано производить Код: plsql 1. так это для for loop специфицировано. У тебя другая история - Cursor FOR LOOP Statement, для которого ничто подобное не оговаривается. Разница, вероятно, здесь вот в чем: в первом случае (For Loop) воздействовать на i (прямой аналог понятия итератора) означает прямую попытку слома итеративного цикла, что приводит к ошибке времени компиляции. Второй случай (cursor for loop) сам цикл следует читать как for each в "других языках программирования". То есть, во втором случае, переменная цикла не является итератором, который скрыт, и потому сам итератор нельзя сломать, а видимая переменная цикла есть просто значение, возвращаемое из коллекции скрытым от глаз писателя итератором. И делай ты с этим значением что хошь. Любая попытка объявить его immutable внутри цикла противоречила бы здравому смыслу. Т.к. а) это локальная копия значения из итерируемой коллекции и, б) никакие манипуляции с ней не способны сломать сам цикл (его скрытый итератор или условия продолжения, что в данном случае, можно не различать) В доке для cursor for loop это, по счастью не оговаривается, и любая попытка оговорить - опечалит (обессмыслит) полезность данного нам в таком виде for each ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2017, 21:37 |
|
||
|
а че, так можно было ?
|
|||
|---|---|---|---|
|
#18+
boobyпеременная цикла не является итератором, который скрытПрисвоение компоненте "курсора" меняется не указатель на буфер строки, а содержимое этого буфера. Посему, рассуждения на тему здравого смысла спорны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2017, 01:17 |
|
||
|
а че, так можно было ?
|
|||
|---|---|---|---|
|
#18+
за упокойboobyпеременная цикла не является итератором, который скрытПрисвоение компоненте "курсора" меняется не указатель на буфер строки, а содержимое этого буфера. Посему, рассуждения на тему здравого смысла спорны. воу-воу-воу... как это перевести на р ю сский? где курсора компоненте? откуда у парня итальянская грусть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2017, 02:32 |
|
||
|
а че, так можно было ?
|
|||
|---|---|---|---|
|
#18+
boobyоткуда у парня итальянская грусть? испанская. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2017, 07:37 |
|
||
|
а че, так можно было ?
|
|||
|---|---|---|---|
|
#18+
boobyоткуда у парня итальянская грусть?и откуда ты знаешь, что у парня, если booby? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2017, 15:37 |
|
||
|
а че, так можно было ?
|
|||
|---|---|---|---|
|
#18+
--Eugene--boobyоткуда у парня итальянская грусть?и откуда ты знаешь, что у парня, если booby? Из первоисточника: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2017, 15:50 |
|
||
|
а че, так можно было ?
|
|||
|---|---|---|---|
|
#18+
record Name for the loop index that the cursor FOR LOOP statement implicitly declares as a %ROWTYPE record variable of the type that cursor or select_statement returns. Думаю, тут вопрос больше религии. Нигде в документации не написано, что эту неявно объявленную переменную можно менять, поэтому я б не стал менять. Мало ли переменных оракл где-то неявно объявляет, это не значит, что это хорошая практика лезть и менять их. Другое дело, что в использовании известных недокументированных фич тоже особенно страшного ничего нет (максимум - поведение изменится в след. версии, что в ряде случаев маловероятно). имхо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2017, 18:42 |
|
||
|
а че, так можно было ?
|
|||
|---|---|---|---|
|
#18+
user1241record Name for the loop index that the cursor FOR LOOP statement implicitly declares as a %ROWTYPE record variable of the type that cursor or select_statement returns. Думаю, тут вопрос больше религии. Нигде в документации не написано, что эту неявно объявленную переменную можно менять, поэтому я б не стал менять. Мало ли переменных оракл где-то неявно объявляет, это не значит, что это хорошая практика лезть и менять их. Другое дело, что в использовании известных недокументированных фич тоже особенно страшного ничего нет (максимум - поведение изменится в след. версии, что в ряде случаев маловероятно).Ключевое слово тут - variable. Не constant. Да и как ещё можно сделать fetch into rec или rec := arr(i); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2017, 07:32 |
|
||
|
а че, так можно было ?
|
|||
|---|---|---|---|
|
#18+
Elic, По мне так, здесь ключевые слова implicitly declares. В обычном For Loop тоже variable, не константа, но менять нельзя: FOR LOOP Index The index of a FOR LOOP statement is implicitly declared as a variable of type INTEGER that is local to the loop. The statements in the loop can read the value of the index, but cannot change it. Statements outside the loop cannot reference the index. С одной стороны менять cursor FOR LOOP index в документации не запрещено. С другой стороны менять неявно объявленные переменные без надлежащих причин, про которые не написано, что их можно менять, bad practice. сугубо имхо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2017, 09:18 |
|
||
|
а че, так можно было ?
|
|||
|---|---|---|---|
|
#18+
user1241, про bad practice - не путай осторожность и bad practice. Ну не понимаешь ты, как оно работает и зачем именно так устроено, от того даешь себе чес-слово не использовать. Это простая осторожность - ни бэд, ни гуд. И осторожность эта обязана быть последовательной . Дал слово - держи. Сказал - не трону "имплицитную переменную", значит - никогда не напишу цикл с имплицитным курсором for r in (select dummy from dual) loop end loop; Обязательно всегда сначала явно объявлю курсор, а потом только цикл его использующий. Станет у тебя персональный практис имени тебя любимого. Будет что внукам рассказывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2017, 10:59 |
|
||
|
а че, так можно было ?
|
|||
|---|---|---|---|
|
#18+
user1241... С одной стороны менять cursor FOR LOOP index в документации не запрещено. как это не - "не запрещено"? явно и категорически запрещено путем ошибки времени копмиляции . У тебя код даже скомпилироваться не сможет. Читай у себя выше твою цитату из документации - The statements in the loop can read the value of the index, but cannot change it ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2017, 11:22 |
|
||
|
а че, так можно было ?
|
|||
|---|---|---|---|
|
#18+
booby, Начинать обсуждение стоит после изучения документации, так смысла нет. В документации разделы FOR LOOP Statement и Cursor FOR LOOP Statements семантически не связаны, каждый описывает свой случай, в каждом своя диаграмма с синтаксисом. Ты все передернул. Ссылаться можно, конечно, в документации об этом прямо написано для обоих случаев. Про менять значение для Cursor FOR LOOP Statements ничего не написано, для FOR LOOP Statement явно написано, что нельзя, но опять же семантически и логически там разные разделы, даже в цитате type INTEGER должен о чем-то говорить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2017, 12:25 |
|
||
|
а че, так можно было ?
|
|||
|---|---|---|---|
|
#18+
Ссылки: Cursor FOR LOOP Statement , FOR LOOP Statement ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2017, 12:40 |
|
||
|
а че, так можно было ?
|
|||
|---|---|---|---|
|
#18+
user1241, так это и указано в моем первом сообщении - это две разные истории, со своими правилами жизни. А обсуждать что-либо, уже имея готовое мнение по предполагаемому вопросу - нет смысла априори. Весь фикус строится на том, что смысл обсуждению придает спрашивающий. Если смысл состоял в факте выражения возмущения от возможности изменять значение имплицитного рекорда в corsor for loop - то результат достигнут. Возмущение высказано. Объяснения не приняты. Здесь предмета для обсуждения ни в какую лупу не просматривается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2017, 12:56 |
|
||
|
а че, так можно было ?
|
|||
|---|---|---|---|
|
#18+
booby, Лично у меня никакого возмущения нет. Изучив весь материал и аргументы, я пришел к выводу, что менять значение bad practice, это лично мое мнение и это то, что мне подсказывает здравый смысл, почему, я написал выше. Я бы предпочел, чтобы было наоборот. Пускай каждый сам смотрит аргументы и думает своей головой, не опираясь на неаргументированное мнение других. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2017, 13:09 |
|
||
|
а че, так можно было ?
|
|||
|---|---|---|---|
|
#18+
user1241booby, Лично у меня никакого возмущения нет. Изучив весь материал и аргументы, я пришел к выводу, что менять значение bad practice, это лично мое мнение и это то, что мне подсказывает здравый смысл, почему, я написал выше. Я бы предпочел, чтобы было наоборот. Пускай каждый сам смотрит аргументы и думает своей головой, не опираясь на неаргументированное мнение других. для меня не bad practice напр "дублирование" записей прочитали изменили нужное добавили rec в Вашем случае, нужно (имхо лишнее) 1) декларирование промежут переменной 2) перепресвоение ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2017, 13:53 |
|
||
|
а че, так можно было ?
|
|||
|---|---|---|---|
|
#18+
user1241, мнение, предназначенное для личного использования, не нуждается в публичной аргументации. Есть оно у тебя и хорошо. Более того, для того, чтобы не опираться на мнение других не требуется даже наличие собственного. "Раз не написано, что можно - значит нельзя" - для тебя - твое мнение , а для меня - лишенная конкретного контекста фраза, поэтому - бессмыслица . Видишь - здесь даже начинать обсуждать нечего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2017, 13:54 |
|
||
|
а че, так можно было ?
|
|||
|---|---|---|---|
|
#18+
booby"Раз не написано, что можно - значит нельзя" - для тебя - твое мнение, Обсуждать смысла нет, потому что вы не читатель. Само собой, когда я говорил про cursor FOR LOOP index, я говорил про Cursor FOR LOOP Statement. user1241 Мало ли переменных оракл где-то неявно объявляет, это не значит, что это хорошая практика лезть и менять их. user1241 В обычном For Loop тоже variable, не константа, но менять нельзя: user1241 С другой стороны менять неявно объявленные переменные без надлежащих причин, про которые не написано, что их можно менять, bad practice Я привык работать с документацией и стараюсь выбирать правильные инструменты для решения задач. Одна лишняя строчка это не проблема (тут, кстати, пример не помешает) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2017, 14:36 |
|
||
|
а че, так можно было ?
|
|||
|---|---|---|---|
|
#18+
[quot user1241]booby"Раз не написано, что можно - значит нельзя" - для тебя - твое мнение, Обсуждать смысла нет, потому что вы не читатель. Само собой, когда я говорил про cursor FOR LOOP index, я говорил про Cursor FOR LOOP Statement. user1241 Мало ли переменных оракл где-то неявно объявляет, это не значит, что это хорошая практика лезть и менять их. В этой фразе нет содержания и вы не постарались придать ей смысл в конкретном контексте cursor for loop. С моей точки зрения - это даже на "мнение" не тянет - обыкновенный последний выдох ПЖ. user1241 В обычном For Loop тоже variable, не константа, но менять нельзя: и что? user1241 С другой стороны менять неявно объявленные переменные без надлежащих причин, про которые не написано, что их можно менять, bad practice вы как-нибудь определитесь - что должно быть написано, для того чтобы вы смогли проявить ваше умение читать. Что именно вас беспокоит - что компилятор неявно определяет переменные без видимых вами причин, что писатель документации лично вам не выдал разрешения на модификацию неявно объявленного экземпляра рекорда, или что в этом разделе вам не показали кусок кода, где модификация оправдана по некому основанию? Второе, вообще говоря, гарантируется фразой Statements inside the loop can reference record and its fields ( Assignment statement - он вполне себе стейтмент, среди прочих), а третье точно за рамками описывающей синтаксис документации. user1241 Я привык работать с документацией и стараюсь выбирать правильные инструменты для решения задач. Одна лишняя строчка это не проблема (тут, кстати, пример не помешает) Похоже, что тот, кто вам это сказал - жестоко посмеялся над вами. Вы даже боитесь неправильно - вы не знаете ни как читать, ни как бояться, от того пишите чепуху. Бояться надо совсем другого - уходить в область нарушения выданных вам гарантий cursor for loop гарантирует вам что, курсор будет как открыт, так и закрыт имлицитно, даже если вы его преждевременно прерываете по exit. В отсутствии преждевременно завершения цикла курсор бдет выфетчен целиком. И его имлицитно декларированный рекорд гарантированно доступен для стейтментов внутри тела цикла. А уж модифицировать его значение в этом цикле или вовсе не использовать - это уж как ваша фантазия сыграет. Вам гарантируется, что этот рекорд есть . Гарантии эти даны были с самого начала и гарантированное поведение будет сохраняться до самого конца существования конструкции cursor for loop. Иначе сам язык программирования сменит название . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2017, 16:01 |
|
||
|
а че, так можно было ?
|
|||
|---|---|---|---|
|
#18+
user1241... Ты все передернул. Ссылаться можно, конечно, в документации об этом прямо написано для обоих случаев. Про менять значение для Cursor FOR LOOP Statements ничего не написано, для FOR LOOP Statement явно написано, что нельзя, но опять же семантически и логически там разные разделы, даже в цитате type INTEGER должен о чем-то говорить. касательно INTEGER - всего лишь о многолетней ошибке в документации. Просто попробуй выполнить: Код: plsql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2017, 16:15 |
|
||
|
а че, так можно было ?
|
|||
|---|---|---|---|
|
#18+
Единственное содержательное boobyВторое, вообще говоря, гарантируется фразой Statements inside the loop can reference record and its fields ( Assignment statement - он вполне себе стейтмент, среди прочих), а третье точно за рамками описывающей синтаксис документации. Вы подгоняете под, то что хотите увидеть. Ссылаться можно. Это же написано в FOR LOOP Statement: Statements inside the loop can reference index но при этом: , but cannot change its value. Причем разделы не связаны. Были бы связаны, было бы логично распространить ограничение but cannot change its value, и на Cursor FOR LOOP Statement (при этом, бывают ситуации, что oracle разрешает, документация запрещает, не знаю как вы, но в таких ситуациях, если не доказано, что это documentation bug, я следую документации) При этом никто пока, что даже примеров, когда эта техника может реально сократить код, не представил. Я так понимаю, тут битва идёт за собственный код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2017, 16:26 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=155&tid=1885638]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
45ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 331ms |

| 0 / 0 |
