|
|
|
Связывание таблицы и хранимки
|
|||
|---|---|---|---|
|
#18+
Можно ли связать таблицу и хранимку? я пробую сделать вот так: select cd.Id,d.Discount from Cards cd, GETCLIENTDISCOUNT(cd.Id,'01.05.03',0,0) d план строит нормально а при выполнении пишет: The cursor identified in the update or delete statement is not positioned on . no current record for fetch operation. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2004, 18:08 |
|
||
|
Связывание таблицы и хранимки
|
|||
|---|---|---|---|
|
#18+
А где связь между ХП и таблицей ? select cd.Id,d.Discount from Cards cd, GETCLIENTDISCOUNT(cd.Id,'01.05.03',0,0) d ON (...) Best regards, Dnico. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2004, 18:10 |
|
||
|
Связывание таблицы и хранимки
|
|||
|---|---|---|---|
|
#18+
И Вообще так не делают, надо так: Код: plaintext 1. 2. Best regards, Dnico. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2004, 18:13 |
|
||
|
Связывание таблицы и хранимки
|
|||
|---|---|---|---|
|
#18+
И еще надо скорее всего текст ХП смотреть... чуствую там все не так ... Best regards, Dnico. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2004, 18:14 |
|
||
|
Связывание таблицы и хранимки
|
|||
|---|---|---|---|
|
#18+
авторА где связь между ХП и таблицей ? В процедуру передается параметр cd.Id который и является связкой авторSELECT cd.Id,d.Discount FROM Cards cd JOIN GETCLIENTDISCOUNT('01.05.03',0,0) d ON (cd.Id = d.Id) Все равно таже ошибка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2004, 18:16 |
|
||
|
Связывание таблицы и хранимки
|
|||
|---|---|---|---|
|
#18+
Текст ХП нарисуй, сейчас разберемся ... Best regards, Dnico. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2004, 18:17 |
|
||
|
Связывание таблицы и хранимки
|
|||
|---|---|---|---|
|
#18+
CREATE PROCEDURE GETCLIENTDISCOUNT( CARDID VARCHAR(16), DATEONLY DATE, TOTAL DOUBLE PRECISION, OPERID INTEGER) RETURNS ( DISCOUNT DOUBLE PRECISION, MAXSUM DOUBLE PRECISION, CURRENTSUM DOUBLE PRECISION, RET_CARDID VARCHAR(16)) AS declare variable StartDate1 DATE; declare variable StartDate2 DATE; declare variable EndDate1 DATE; declare variable EndDate2 DATE; declare variable DateTemp DATE; declare variable Sum1 DOUBLE PRECISION; declare variable Sum2 DOUBLE PRECISION; declare variable Sum1_S DOUBLE PRECISION; declare variable Sum2_S DOUBLE PRECISION; declare variable Sum1_R DOUBLE PRECISION; declare variable Sum2_R DOUBLE PRECISION; begin /*---------------------------------------------------------*/ /*Сначала устанавливаем текущую дату*/ DateTemp = DateOnly; StartDate1 = FirstDayMonth(DateTemp); EndDate1 = LastDayMonth(DateTemp); /*Отнимаем один месяц*/ DateTemp = IncDate(StartDate1,0,-1,0); StartDate2 = FirstDayMonth(DateTemp); EndDate2 = LastDayMonth(DateTemp); /*--Выбираем из 2-х месяцев максимальную сумму----*/ SELECT SUM(Actual) FROM Opers WHERE (CardId = :CardId) AND (RDB$Modified <> 1) AND (DateOnly BETWEEN :StartDate1 AND :EndDate1) AND (Id <> :OperId) AND (ActionId <> 'R') INTO :Sum1_S; if (Sum1_S IS NULL) then Sum1_S = 0; SELECT SUM(Actual) FROM Opers WHERE (CardId = :CardId) AND (RDB$Modified <> 1) AND (DateOnly BETWEEN :StartDate1 AND :EndDate1) AND (Id <> :OperId) AND (ActionId = 'R') INTO :Sum1_R; if (Sum1_R IS NULL) then Sum1_R = 0; Sum1 = Sum1_S - Sum1_R; CURRENTSUM = Sum1; SELECT SUM(Actual) FROM Opers WHERE (CardId = :CardId) AND (RDB$Modified <> 1) AND (DateOnly BETWEEN :StartDate2 AND :EndDate2) AND (Id <> :OperId) AND (ActionId <> 'R') INTO :Sum2_S; if (Sum2_S IS NULL) then Sum2_S = 0; SELECT SUM(Actual) FROM Opers WHERE (CardId = :CardId) AND (RDB$Modified <> 1) AND (DateOnly BETWEEN :StartDate2 AND :EndDate2) AND (Id <> :OperId) AND (ActionId = 'R') INTO :Sum2_R; if (Sum2_R IS NULL) then Sum2_R = 0; Sum2 = Sum2_S - Sum2_R; /*-------------------------------------------------*/ if (Sum1 > Sum2) then MaxSum = Sum1; else MaxSum = Sum2; /*MaxSum = MaxSum + Total;*/ /*-----------Выбираем соответствующую скидку-------*/ SELECT MAX(Discount) FROM DiscBarriers WHERE (Barrier < :MaxSum) INTO :Discount; if (Discount IS NULL) then /*Сумма ниже всех барьеров, делаем скидку минимальной*/ begin SELECT MIN(Discount) FROM DiscBarriers INTO :Discount; end Ret_CardId = CardId; suspend; end Когда вызываю просто select * from GetClientDiscount('11111111','01.05.03',0,0) то все нормально ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2004, 18:21 |
|
||
|
Связывание таблицы и хранимки
|
|||
|---|---|---|---|
|
#18+
Все понятно. Попробуй так: Код: plaintext 1. 2. Best regards, Dnico. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2004, 18:25 |
|
||
|
Связывание таблицы и хранимки
|
|||
|---|---|---|---|
|
#18+
Да уже давно так пробовал ошибка одна и та же кстати FB1.5+IBExpert ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2004, 18:27 |
|
||
|
Связывание таблицы и хранимки
|
|||
|---|---|---|---|
|
#18+
SELECT cd.Id,(select Discount from GETCLIENTDISCOUNT(cd.Id,'01.05.03',0,0)) FROM Cards cd вот так вот вроде заработало ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2004, 18:45 |
|
||
|
Связывание таблицы и хранимки
|
|||
|---|---|---|---|
|
#18+
Нельзя передовать cd.Id в качестве параметра ХП. Надо сделать так: Код: plaintext 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. И тогда : Код: plaintext 1. 2. Best regards, Dnico. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2004, 18:48 |
|
||
|
Связывание таблицы и хранимки
|
|||
|---|---|---|---|
|
#18+
vovan1 Так конечно должно работать, но вложенные запросы думаю очень медленно будут работать. Best regards, Dnico. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2004, 18:49 |
|
||
|
Связывание таблицы и хранимки
|
|||
|---|---|---|---|
|
#18+
При связывании ХП и таблицы нужно использовать LEFT JOIN . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2004, 19:13 |
|
||
|
Связывание таблицы и хранимки
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий Согласен, но не всегда. Best regards, Dnico. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2004, 19:19 |
|
||
|
Связывание таблицы и хранимки
|
|||
|---|---|---|---|
|
#18+
Если видишь " no current record for fetch operation ", то ОБЯЗАТЕЛЬНО . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2004, 19:23 |
|
||
|
Связывание таблицы и хранимки
|
|||
|---|---|---|---|
|
#18+
МимопроходящийПри связывании ХП и таблицы нужно использовать LEFT JOIN. Это обязательно если соединение с ХП идет через параметр. Запрос вида: Код: plaintext 1. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2004, 07:58 |
|
||
|
Связывание таблицы и хранимки
|
|||
|---|---|---|---|
|
#18+
... "Ещё одна особенность, точнее на этот раз пожалуй даже глупость, которую периодически пытаются сделать новички. Ну например так: select * from sp1(t.id) sp, test2 t То есть в качестве параметра процедуры идёт одно из полей другого соединяемого отношения. Никогда не пройдёт. По той простой причине, что при любой технологии сначала выполняется соединение, а уже потом появляются поля." ... Подробности - http://www.krista.ru/ib/proc-join.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2004, 14:58 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=32507981&tid=1578691]: |
0ms |
get settings: |
6ms |
get forum list: |
22ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
178ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 457ms |

| 0 / 0 |
