|
|
|
PLSQL Char vs Varchar2
|
|||
|---|---|---|---|
|
#18+
Есть таблица Код: plsql 1. 2. 3. 4. 5. И есть функция Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. В таблице есть запись с именем test Вызываю Код: plsql 1. И получаю 0. Но если переопределить входной параметр функции Код: plsql 1. то все работает. Объясните, почему не работает с VARCHAR2? in_name корректно выводится через dbms_output.put_line() И еще вопрос. Я не могу указать размер входного параметра? Если пишу так Код: plsql 1. то получаю ошибку PLS-00103: Encountered the symbol "(" when expecting one of the following: := ) , default varying character large (Line: 1 Col: 47) С уважением, Vasilisk ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2017, 15:26 |
|
||
|
PLSQL Char vs Varchar2
|
|||
|---|---|---|---|
|
#18+
Не может char(10) быть 'test'. Он будет дополнен пробелами до 10 знаков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2017, 15:28 |
|
||
|
PLSQL Char vs Varchar2
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, CHAR datatype The CHAR data type specifies a fixed-length character string in the database character set ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2017, 15:35 |
|
||
|
PLSQL Char vs Varchar2
|
|||
|---|---|---|---|
|
#18+
tru55Не может char(10) быть 'test'. Он будет дополнен пробелами до 10 знаков.Тогда почему такой запрос Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. возвращает правильный результат? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2017, 15:43 |
|
||
|
PLSQL Char vs Varchar2
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, попробуй с Код: plsql 1. , подумай ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2017, 15:51 |
|
||
|
PLSQL Char vs Varchar2
|
|||
|---|---|---|---|
|
#18+
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2017, 15:54 |
|
||
|
PLSQL Char vs Varchar2
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Если очень приближенно и на пальцах, то потому что литерал 'TEST' имеет тип CHAR и при сравнении с полем типа CHAR дополняется справа пробелами до длины, определенной для поля таблицы при ей создании (это семантика сравнения типа данных CHAR - сравниваемые значения дополняются справа пробелами до одинаковой длинны и сравниваются посимвольно). В итоге у тебя сравнивается значение поля со значением выражения rpad('TEST',' ',20). То есть работает примерно такое сравнение: 'TEST ' = rpad('TEST',' ',20) При сравнении же с varchar2 работает конструкции: 'TEST ' (char(20) => VARCHAR2(20)) = 'TEST' (varchar2(4)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2017, 15:58 |
|
||
|
PLSQL Char vs Varchar2
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх_Vasilisk_, Если очень приближенно и на пальцах, то потому что литерал 'TEST' имеет тип CHAR и при сравнении с полем типа CHAR дополняется справа пробелами до длины, определенной для поля таблицы при ей создании (это семантика сравнения типа данных CHAR - сравниваемые значения дополняются справа пробелами до одинаковой длинны и сравниваются посимвольно). В итоге у тебя сравнивается значение поля со значением выражения rpad('TEST',' ',20). То есть работает примерно такое сравнение: Код: plsql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2017, 16:00 |
|
||
|
PLSQL Char vs Varchar2
|
|||
|---|---|---|---|
|
#18+
envподумайЕсли в запросе test кастуется к CHAR на основании типа поля, то почему так же скастоваться не может переменная? Почему для такой функции Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. все кастуется и возвращается результат с таким вызовом Код: plsql 1. и даже с таким Код: plsql 1. Почему мы переменную CHAR можем скастовать в NUMBER, а VARCHAR2 в CHAR нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2017, 16:03 |
|
||
|
PLSQL Char vs Varchar2
|
|||
|---|---|---|---|
|
#18+
Добрый Э - ЭхПри сравнении же с varchar2 работает конструкции: 'TEST ' (char(20) => VARCHAR2(20)) = 'TEST' (varchar2(4))Т.е. Вы хотите сказать, что не параметр кастуется к типу поля, а тип поля кастуется к типу параметра? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2017, 16:06 |
|
||
|
PLSQL Char vs Varchar2
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Добрый Э - ЭхПри сравнении же с varchar2 работает конструкции: 'TEST ' (char(20) => VARCHAR2(20)) = 'TEST' (varchar2(4))Т.е. Вы хотите сказать, что не параметр кастуется к типу поля, а тип поля кастуется к типу параметра? Да. Запрос Код: plsql 1. в случае наличия в char_field нецифровых символов упадет с ошибкой. И да, при несовпадении типов индексы не работают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2017, 16:11 |
|
||
|
PLSQL Char vs Varchar2
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Дело не в сравнении поля таблицы и параметра, а в сравнении значения ОДНОГО типа со значением ДРУГОГО типа. У оракула есть определенные правила на этот счёт. К примеру, символьные типы при сравнении с числовыми типами или типами даты-времени преобразуются к числам и датам. При сравнении Char и varchar происходит преобразование типа char к типу varchar. И т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2017, 16:15 |
|
||
|
PLSQL Char vs Varchar2
|
|||
|---|---|---|---|
|
#18+
MazoHistДа.Сюрприз! Спасибо большое за пояснение MazoHistпри несовпадении типов индексы не работают.Ну это логичный вывод из первого утверждения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2017, 16:17 |
|
||
|
PLSQL Char vs Varchar2
|
|||
|---|---|---|---|
|
#18+
Добрый Э - ЭхИ т.д.Лучше давать ссылку на документацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2017, 16:18 |
|
||
|
PLSQL Char vs Varchar2
|
|||
|---|---|---|---|
|
#18+
Добрый Э - ЭхУ оракула есть определенные правила на этот счётМожно тынц? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2017, 16:18 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39551098&tid=1884940]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
149ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 495ms |

| 0 / 0 |
