|
|
|
Баг, или у Оракла или в голове
|
|||
|---|---|---|---|
|
#18+
всем привет, кажется у меня понедельниковский вопрос. Есть старая таблица Код: plsql 1. 2. 3. 4. 5. не спрашивайте почему NUMMER это CHAR я не отвечу, т.е. не знаю. В любом случае STF + AKTIV + NUMMER это юник. а теперь начинается понедельник!! Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Тут самым простым ответом с моей стороны было, что проблема в том что поле NUMMER заявлено как CHAR!, но после перевода в VARCHAR2 ситуация не изменилась. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2017, 13:40 |
|
||
|
Баг, или у Оракла или в голове
|
|||
|---|---|---|---|
|
#18+
vladimir74выдаёт NULLКакие основания противопоставлять этот результат "правильному ответу"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2017, 13:44 |
|
||
|
Баг, или у Оракла или в голове
|
|||
|---|---|---|---|
|
#18+
vladimir74, Что лежит в :p_nummer? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2017, 14:03 |
|
||
|
Баг, или у Оракла или в голове
|
|||
|---|---|---|---|
|
#18+
-2-, ну хотя бы то, что во втором случае не меняя значение переменых, мы получаем правильный Record. Но вопрос уже отпал :( Oracle не конвертирует данные при MODIFY. после того как переписал значение NUMMER - всё заработало :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2017, 14:05 |
|
||
|
Баг, или у Оракла или в голове
|
|||
|---|---|---|---|
|
#18+
Egoр, в p_nummer - иногда "1" иногда "01" и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2017, 14:06 |
|
||
|
Баг, или у Оракла или в голове
|
|||
|---|---|---|---|
|
#18+
vladimir74Egoр, в p_nummer - иногда "1" иногда "01" и т.д. отсюда разница в результатах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2017, 14:10 |
|
||
|
Баг, или у Оракла или в голове
|
|||
|---|---|---|---|
|
#18+
Egoр, неее!! еще раз во время теста значение переменных НЕМЕНЯЛОСЬ!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2017, 14:12 |
|
||
|
Баг, или у Оракла или в голове
|
|||
|---|---|---|---|
|
#18+
vladimir74, to_char(to_number('01')) = '1' поэтому NUMMER = '01' - это False, а NUMMER = to_char(to_number('01')) - это True ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2017, 14:17 |
|
||
|
Баг, или у Оракла или в голове
|
|||
|---|---|---|---|
|
#18+
Egoр, это элементарно. Но в данном случае было так: STF =1 --NUMBER, NUMMER ='1' CHAR -- Выдаёт NULL STF =1 --NUMBER, NUMMER =1 CHAR -- Выдаёт RECORD после MODIFY - тот же результат STF =1 --NUMBER, NUMMER ='1' VARCHAR2 -- Выдаёт NULL STF =1 --NUMBER, NUMMER =1 VARCHAR2 -- Выдаёт RECORD после изменения значения с '1' на '1' STF =1 --NUMBER, NUMMER ='1' VARCHAR2 -- Выдаёт RECORD ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2017, 14:32 |
|
||
|
Баг, или у Оракла или в голове
|
|||
|---|---|---|---|
|
#18+
vladimir74, ну тут кажется все просто: в NUMMER CHAR(2 CHAR) - храниться 1, но по факту Char 2 добъёт его пробелами до размера чара итого '1 ' если сравнить с :p_nummer -- varchar2 как '1' или '01' - это False если сравнить с to_number(:p_nummer) то он сделает неявное приведение типов и получит что-то типа такого NUMMER = cast(to_number(:p_nummer) as char) и будет искать '1 ' = '1 ' что есть True ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2017, 14:35 |
|
||
|
Баг, или у Оракла или в голове
|
|||
|---|---|---|---|
|
#18+
vladimir74, думаю если делать Код: plsql 1. - все будет работать ну и в :p_nummer передавать '1' а не '01' ... ну или анализировать данные как хранят односимвольные NUMMER (по примеру кажется что все-таки как '1 ') выходов много, to_number, trim, rtrim, cast( as char(2) ... ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2017, 14:44 |
|
||
|
Баг, или у Оракла или в голове
|
|||
|---|---|---|---|
|
#18+
MaximaXXLvladimir74, думаю если делать Код: plsql 1. - все будет работать ну и в :p_nummer передавать '1' а не '01' ... ну или анализировать данные как хранят односимвольные NUMMER (по примеру кажется что все-таки как '1 ') выходов много, to_number, trim, rtrim, cast( as char(2) ... ) примерно так я и сделал и теперь всё работает. насчём что передаваьть в :p_nummer - тут сложнее :( т.к. при stf 1,4 надо передавать 1,2,3,4... при stf 2,3 - 01,02,03,04... Вот такой у нас северный олень живёт :) Эту структуру кто то 20 лет назад придумад, и досих пор живёт :) Проблема а чтом что в VARCHAR2 данные хранятся как '1' а в CHAR ' 1' Это я еще знал, а вот то что при MODIFY не происходит конвертации - не знал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2017, 14:52 |
|
||
|
Баг, или у Оракла или в голове
|
|||
|---|---|---|---|
|
#18+
vladimir74Проблема а чтом что в VARCHAR2 данные хранятся как '1' а в CHAR ' 1' Надеюсь это опечатка и имелось ввиду VARCHAR2 данные хранятся как '1' а в CHAR '1 ' SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2017, 15:00 |
|
||
|
Баг, или у Оракла или в голове
|
|||
|---|---|---|---|
|
#18+
MaximaXXLvladimir74, ну тут кажется все просто: в NUMMER CHAR(2 CHAR) - храниться 1, но по факту Char 2 добъёт его пробелами до размера чара итого '1 ' если сравнить с :p_nummer -- varchar2 как '1' или '01' - это False если сравнить с to_number(:p_nummer) то он сделает неявное приведение типов и получит что-то типа такого NUMMER = cast(to_number(:p_nummer) as char) и будет искать '1 ' = '1 ' что есть True імхо не так NUMMER =to_number(:p_nummer) поле NUMMER будет неявно приведено к number(to_number(nummer)), если бы были значения напр " ", то ORA ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2017, 15:03 |
|
||
|
Баг, или у Оракла или в голове
|
|||
|---|---|---|---|
|
#18+
SY, очепятка =( stax.., я честно не помню в какую сторону будет идти неявное преобразование, но оно точно будет и я обычно этого избегаю из-за непредсказуемости ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2017, 15:08 |
|
||
|
Баг, или у Оракла или в голове
|
|||
|---|---|---|---|
|
#18+
MaximaXXL, к числовым, поетому и выстраливает ORA-01722: invalid number, в тч в зависимости от плана ...... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2017, 15:15 |
|
||
|
Баг, или у Оракла или в голове
|
|||
|---|---|---|---|
|
#18+
SYvladimir74Проблема а чтом что в VARCHAR2 данные хранятся как '1' а в CHAR ' 1' Надеюсь это опечатка и имелось ввиду VARCHAR2 данные хранятся как '1' а в CHAR '1 ' SY. точно, каюсь :( '1 ' вообще я поэтому очень не люблю CHAR, а так же самовольные оракловские преобразования. Лучше бы сразу говорил несоответсвие типов, иди исправляй. ИМХО намного меньше проблем было бы потом :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2017, 15:19 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39461640&tid=1885854]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
192ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 512ms |

| 0 / 0 |
