Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
11.05.2021, 19:07
|
|||
---|---|---|---|
|
|||
Триггер на представление |
|||
#18+
Добрый день! Мне необходимо создать составной триггер, чтобы сделать представление редактируемым. Создаю представление ("Last_Name", "First_Name", "Salary") на таблицу Employees ("Salary" имеет формат - "число$"). Но возникают проблемы: 1) Почему-то не обрабатываются ситуации в разделе Исключений в WHEN OTHERS. Например, если пытаюсь вставить больше, чем три столбца. 2) При выполнении любого UPDATE возникает исключение о том, что значение фамилии не должно быть NULL. Вот код: Код: 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. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250.
Помогите, пожалуйста, разобраться. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
11.05.2021, 19:09
|
|||
---|---|---|---|
|
|||
Триггер на представление |
|||
#18+
В Employees тип данных salary - Number, email имеет ограничение - 8 символов. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.05.2021, 00:19
|
|||
---|---|---|---|
|
|||
Триггер на представление |
|||
#18+
А где код создания таблицы и вьюхи? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.05.2021, 11:41
|
|||
---|---|---|---|
|
|||
Триггер на представление |
|||
#18+
Представление: Код: plsql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.05.2021, 11:52
|
|||
---|---|---|---|
|
|||
Триггер на представление |
|||
#18+
С этими проблемами удалось разобраться: надо было проверку фамилии на null перенести в отдельный IF. Но возникла еще одна проблема. Пытаюсь произвести обновление з/п следующим образом: Код: plsql 1. 2.
Обрабатываю новое значение как 'число$+число$', избавившись от знака доллара и преобразовав подстроки в числа, но возникает мое исключение. Код: 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. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257.
Как это исправить? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.05.2021, 11:55
|
|||
---|---|---|---|
Триггер на представление |
|||
#18+
Stravicki, Код: plsql 1. 2. 3. 4.
если employee_id в триггере не переопределяется, то в не однопользовательской среде, ето "неправильно" (рано или поздно выстрелит) ps удалять надо сначала с подчиненных таблиц ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.05.2021, 12:08
|
|||
---|---|---|---|
|
|||
Триггер на представление |
|||
#18+
Stax, Спасибо! А не подскажите, в чем может быть проблема с обновлением зарплаты по типу "Salary" = "Salary" + '8000$'? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.05.2021, 12:20
|
|||
---|---|---|---|
Триггер на представление |
|||
#18+
Stravicki Stax, Спасибо! А не подскажите, в чем может быть проблема с обновлением зарплаты по типу "Salary" = "Salary" + '8000$'? не понял про +8000 приведите пример update my_view когда надо увеличивать ЗП? зы я невнимательно (мельком) смотрел Ваш триггер ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.05.2021, 12:29
|
|||
---|---|---|---|
|
|||
Триггер на представление |
|||
#18+
Stax, Например, Код: plsql 1. 2. 3.
Здесь проблема в том, что надо обновить з/п на какое-то число (а не установить новое значение). Но в представлении столбец "Salary" строкового типа, поэтому надо строку разбить на подстроки и, преобразовав в числа (удалив символы $), сложить. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.05.2021, 12:42
|
|||
---|---|---|---|
Триггер на представление |
|||
#18+
Stravicki, ясно будет напр "Salary * 1,2' или "Salary + 5%' пишете анализатор формулы, а дальше 1) if/case 2) динамический sql 3) запретить формулы (меняем четко на значение) ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.05.2021, 16:31
|
|||
---|---|---|---|
|
|||
Триггер на представление |
|||
#18+
Stax, Написал функцию analyze_salary, но возникает ошибка в разделе RETURN: 'PLS-00306: ошибочно число или типы аргументов при обращении к 'TO_NUMBER''. Но в чем проблема не вижу. Код: 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. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.05.2021, 16:45
|
|||
---|---|---|---|
Триггер на представление |
|||
#18+
Stravicki в чем проблема не вижу. Не увидите, пока будете сразу совать в to_number многоэтажную шляпу без проверок. Код: plsql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.05.2021, 16:46
|
|||
---|---|---|---|
|
|||
Триггер на представление |
|||
#18+
Или в :new."Salary" не сможет быть записана строка "Salary" ||'+'||'8000$'? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.05.2021, 16:47
|
|||
---|---|---|---|
|
|||
Триггер на представление |
|||
#18+
dmdmdm, в обычно селекте все работает ок ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.05.2021, 16:49
|
|||
---|---|---|---|
Триггер на представление |
|||
#18+
Stravicki, строку с ошибкой не показывает? навскидку FUNCTION check_sal ( sal VARCHAR2 ) RETURN BOOLEAN IS RETURN to_number(check_sal(sal)); ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.05.2021, 16:53
|
|||
---|---|---|---|
|
|||
Триггер на представление |
|||
#18+
Stax, 65 строка - это RETURN в функции analyze_salary А авторRETURN BOOLEAN IS - для проверки з/п при установке, например, просто "Salary" = '8000$' (без +,-,* и т.п.) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.05.2021, 17:05
|
|||
---|---|---|---|
Триггер на представление |
|||
#18+
Stravicki Stax, 65 строка - это RETURN в функции analyze_salary А авторRETURN BOOLEAN IS хочете чтоб я строки номеровал ELSIF check_sal(sal) = TRUE THEN RETURN to_number(check_sal(sal)); я ж написал check_sal(sal) return boolean to_number(от boolean)? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
ps мож ELSIF check_sal(sal) = TRUE THEN RETURN to_number(sal); pss можна ELSIF check_sal(sal) THEN ...... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=52&mobile=1&tid=1880206]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
157ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 248ms |
total: | 510ms |
0 / 0 |