|
|
|
Процедура
|
|||
|---|---|---|---|
|
#18+
Скажите плиз как правильно в процедуре проверить если такая запись в таблицы или ее нет вот пример который не проходит что я делаю не так select a.cheetid into ch from cheet a where (a.cheetdatest = datest and a.cheetdateend = dateend); if (ch is null) then .... else .... end if; Здесь 2 вопроса 1. если табл. пустая он не проходит 2. если возращает много a.cheetid тоже ругаеться в чем дело? как правильно создать такую процедуру ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 11:59:10 |
|
||
|
Процедура
|
|||
|---|---|---|---|
|
#18+
самый простой способ - выбирай count(a.cheetid) и проверяй на = 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 12:06:03 |
|
||
|
Процедура
|
|||
|---|---|---|---|
|
#18+
Так и тянешь лямку без чтения концепта:-) select into должен возвращать одну и только одну строку если не используется bulk collect, иначе кидаются exceptions no_data_found too_many_rows Используй count Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 12:06:35 |
|
||
|
Процедура
|
|||
|---|---|---|---|
|
#18+
не правда я все читал знаю чем is null отличаеться от <> все читал а за совет насчет count спасибочки :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 12:09:15 |
|
||
|
Процедура
|
|||
|---|---|---|---|
|
#18+
не в обиду будет сказано: есть разница между все читал и что-то понял ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 12:14:03 |
|
||
|
Процедура
|
|||
|---|---|---|---|
|
#18+
Я не поводу is null, а по поводу select into и концепции курсоров ... select into должен возвращать одну и только одну строку - об этом говорится в первую очередь практически в любой доке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 12:16:11 |
|
||
|
Процедура
|
|||
|---|---|---|---|
|
#18+
В догонку select count(a.cheetid) into ch from cheet a where (a.cheetdatest = datest and a.cheetdateend = dateend) and rownum<2; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 14:14:58 |
|
||
|
Процедура
|
|||
|---|---|---|---|
|
#18+
to raven13 А что запрос типа Код: plaintext /без group by/ может при каких то обстоятельствах вернуть больше одной строки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 14:17:43 |
|
||
|
Процедура
|
|||
|---|---|---|---|
|
#18+
to raven13 Извиняюсь, теперь поняла вашу идею - чтобы count() всегда возвращал только 0 или 1:-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 14:31:48 |
|
||
|
Процедура
|
|||
|---|---|---|---|
|
#18+
Можно еще так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2003, 09:36:02 |
|
||
|
Процедура
|
|||
|---|---|---|---|
|
#18+
А я бы еще добавил select max(a.cheetid), count(a.cheetid) into ch,cnt from cheet a where (a.cheetdatest = datest and a.cheetdateend = dateend) and rownum<2; Чтобы за значением два раза не ходить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2003, 10:17:29 |
|
||
|
Процедура
|
|||
|---|---|---|---|
|
#18+
Function fc ( datest In date, dateend In date) return Number Is Result Number := 0; Begin select 1 into result from cheet a where (a.cheetdatest = datest and a.cheetdateend = dateend) return(Result); Exception when NO_DATA_FOUND Then result := 0; Return(result); when Others Then Result := -1; return(Result); End fc; ---------- if (fc(sysdate - 10, sysdate)) > 0 Then ......... Else ....... End If; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2003, 10:36:13 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=32185221&tid=1989927]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
184ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 511ms |

| 0 / 0 |
