|
|
|
геттер-пакеты для таблиц
|
|||
|---|---|---|---|
|
#18+
часто в коде нашей системы (бизнес-логика написана на PL/SQL) бывает следующая ситуация: в процедуру передается ключевое поле, но нужно далее по коду из этой же таблицы и другие поля подтягивать в тоннах уже существующего в системе легаси-кода каждый раз пишутся запросы на вытягивание нужных полей такой подход не очень нравится (код обрастает этими запросами), написал в итоге генератор спец пакетов, в которых для нужных таблиц содержатся функции-геттеры полей таблицы получаются примерно такие пакеты: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. кто-то задавался подобным вопросом и, если да, как решал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2016, 22:17 |
|
||
|
геттер-пакеты для таблиц
|
|||
|---|---|---|---|
|
#18+
proxy1, Может, это будет полезно: Pipelined Table Functions as Transformation Functions Example 12-30 Pipelined Table Function Transforms Each Row to Two Rows Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2016, 22:54 |
|
||
|
геттер-пакеты для таблиц
|
|||
|---|---|---|---|
|
#18+
а с другой стороны, подходов много. в частности: 1. передавать в подпрограмму параметр типа SOME_TABLE%ROWTYPE , вытащенный предварительно. 2. передавать ROWID записи, полученный ранее запросом FOR UPDATE , а там уже "подтягивать" нужные колонки запросом SELECT WHERE ROWID=:ROWID , либо делать DML для этого ROWID. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2016, 23:05 |
|
||
|
геттер-пакеты для таблиц
|
|||
|---|---|---|---|
|
#18+
а еще есть ООП с объектными таблицами , но не думаю, что вы этим займетесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2016, 23:23 |
|
||
|
геттер-пакеты для таблиц
|
|||
|---|---|---|---|
|
#18+
--Eugene--а еще есть ООП с объектными таблицами , но не думаю, что вы этим займетесь. система уже крутится на обычных таблицах а про ООП и PL/SQL... ощущения, что оно, вроде как, есть, только никому не надо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2016, 23:29 |
|
||
|
геттер-пакеты для таблиц
|
|||
|---|---|---|---|
|
#18+
proxy1, так или иначе, переключать контекст каждый раз ради получения какого-то конкретного поля таблицы (а именно это вы делаете своими "getter-ами") - это очень и очень не comme il faut ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2016, 23:35 |
|
||
|
геттер-пакеты для таблиц
|
|||
|---|---|---|---|
|
#18+
--Eugene--proxy1, так или иначе, переключать контекст каждый раз ради получения какого-то конкретного поля таблицы (а именно это вы делаете своими "getter-ами") - это очень и очень не comme il faut ну, для комильфо осталось еще добавить генерацию геттера всей строки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2016, 23:39 |
|
||
|
геттер-пакеты для таблиц
|
|||
|---|---|---|---|
|
#18+
Как то было дело реализовывал генератор. Для этого все поля таблицы классифицировались по нескольким признакам 1. тип данных 2. изменяемость (признак использовался при для генерации Setter-ов, или при его отсутствии Getter-ов c deterministic) 3. обязательность (для генерации процедуры вставки записей типа InsertRec(idpCountry integer) и формирования PK) 4. Английское наименование (использовалось для генерации имени функций с учетом регистра GetSystemName()) 5. Русское наименование (для регенерации комментариев) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2016, 08:38 |
|
||
|
геттер-пакеты для таблиц
|
|||
|---|---|---|---|
|
#18+
proxy1часто в коде нашей системы (бизнес-логика написана на PL/SQL) бывает следующая ситуация: в процедуру передается ключевое поле, но нужно далее по коду из этой же таблицы и другие поля подтягивать в тоннах уже существующего в системе легаси-кода каждый раз пишутся запросы на вытягивание нужных полей такой подход не очень нравится (код обрастает этими запросами), написал в итоге генератор спец пакетов, в которых для нужных таблиц содержатся функции-геттеры полей таблицы получаются примерно такие пакеты: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. кто-то задавался подобным вопросом и, если да, как решал? функция которое будет возвращать rowtype? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2016, 10:20 |
|
||
|
геттер-пакеты для таблиц
|
|||
|---|---|---|---|
|
#18+
proxy1--Eugene--а еще есть ООП с объектными таблицами , но не думаю, что вы этим займетесь. система уже крутится на обычных таблицах а про ООП и PL/SQL... ощущения, что оно, вроде как, есть, только никому не надо это (имхо) можно к теме вашего топика применить мартышкин труд, если внимательно оценивать - вредный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2016, 18:27 |
|
||
|
геттер-пакеты для таблиц
|
|||
|---|---|---|---|
|
#18+
orawishproxy1пропущено... система уже крутится на обычных таблицах а про ООП и PL/SQL... ощущения, что оно, вроде как, есть, только никому не надо это (имхо) можно к теме вашего топика применить мартышкин труд, если внимательно оценивать - вредный Опишу ситуацию с пояснениями и примерами. Есть куча легаси-кода на PL-SQL (километры). Практически вся бизнес-логика на PL-SQL и реализована. В километрах этого кода есть обращения к таблицам для подтягивания значений нужных полей. Пример: Таблица Код: plsql 1. Таблица Код: plsql 1. Таблица Код: plsql 1. Есть процедура PL/SQL: Код: 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. в чем же тут: orawishмартышкин труд, если внимательно оценивать - вредный? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2016, 21:11 |
|
||
|
геттер-пакеты для таблиц
|
|||
|---|---|---|---|
|
#18+
proxy1 функции-геттеры полей таблицы а что дает замена "select таблицаA..." на "call функцияA..."? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2016, 22:12 |
|
||
|
геттер-пакеты для таблиц
|
|||
|---|---|---|---|
|
#18+
Нестандарт неsqlproxy1 функции-геттеры полей таблицы а что дает замена "select таблицаA..." на "call функцияA..."? А вот напишите их рядом и сравните (с учётом разрешения имён). Как минимум, короче. И, на мой взгляд, без обоснованных причин напрямую (без обёртки курсорами или функциями) запросы писать в PL/SQL - не очень комильфо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2016, 23:22 |
|
||
|
геттер-пакеты для таблиц
|
|||
|---|---|---|---|
|
#18+
автор Код: plsql 1. вы на каждое поле каждой таблицы свой геттер пишете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2016, 06:32 |
|
||
|
геттер-пакеты для таблиц
|
|||
|---|---|---|---|
|
#18+
proxy1Как минимум, короче. Код: sql 1. 2. Во-первых, получать где-то поля одной таблица по ключу в отрыве от других джоинов и условий достаточно редкая для серверного plsql задача. Ну допустим, где-то приспичило на стороне сервера склеивать строку "...№ ... дата..." в отрыве от других данных - сэкономил 15 нажатий клавиш в трех местах, но вынужден давить клавиши, чтобы написать генератор и генерить на каждый ненужный случай функции, а потом тащить составное имя переменной ради использования одного-двух полей. Во-вторых, получил расходы по памяти, цпу и возможно lio. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2016, 08:03 |
|
||
|
геттер-пакеты для таблиц
|
|||
|---|---|---|---|
|
#18+
кит северных морейавтор Код: plsql 1. вы на каждое поле каждой таблицы свой геттер пишете? Вот код функции, генерирующей пакеты: Код: 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. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2016, 09:52 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39159389&tid=1886984]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
150ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 242ms |
| total: | 453ms |

| 0 / 0 |
