Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Oracle SQL Developer 17.3.0: Кривой биндинг переменных / 15 сообщений из 15, страница 1 из 1
02.10.2017, 23:20
    #39529735
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle SQL Developer 17.3.0: Кривой биндинг переменных
Демонстрационный скрипт - будем гонять его на нижеприведенных клиентах
Код: 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.
set echo on
set serveroutput on 

alter session set nls_numeric_characters = ",.";

-- 1
select 36.6 from dual;

-- 2
declare
l_num number := 36.6;
    procedure PrintNum(p_num number) as
    begin
        dbms_output.put_line(p_num);
    end;
begin
    PrintNum(l_num);
end;
/

-- 3
declare
    procedure PrintNum(p_num number) as
    begin
        dbms_output.put_line(p_num);
    end;
begin
    PrintNum(36.5 + 0.1);
end;
/

-- 4
declare
    procedure PrintNum(p_num number) as
    begin
        dbms_output.put_line(p_num);
    end;
begin
    PrintNum(36.6);
end;
/

SQL*Plus - все работает как ожидалось
Код: 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.
set echo on
set serveroutput on

alter session set nls_numeric_characters = ",.";

Сеанс изменен.

Затрач.время: 00:00:00.00

-- 1
select 36.6 from dual;

      36.6
----------
      36,6

Затрач.время: 00:00:00.00

-- 2
declare
l_num number := 36.6;
    procedure PrintNum(p_num number) as
    begin
        dbms_output.put_line(p_num);
    end;
begin
    PrintNum(l_num);
end;
/
36,6

Процедура PL/SQL успешно завершена.

Затрач.время: 00:00:00.00

-- 3
declare
    procedure PrintNum(p_num number) as
    begin
        dbms_output.put_line(p_num);
    end;
begin
    PrintNum(36.5 + 0.1);
end;
/
36,6

Процедура PL/SQL успешно завершена.

Затрач.время: 00:00:00.00

-- 4
declare
    procedure PrintNum(p_num number) as
    begin
        dbms_output.put_line(p_num);
    end;
begin
    PrintNum(36.6);
end;
/
36,6

Процедура PL/SQL успешно завершена.

Затрач.время: 00:00:00.00

Toad 10.6.1.3 - все работает как ожидалось
Код: 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.
SQL> set serveroutput on
SQL> alter session set nls_numeric_characters = ",."
Session altered.
SQL> -- 1
SQL> select 36.6 from dual

      36.6
----------
      36,6
1 row selected.
SQL> -- 2
SQL> declare
l_num number := 36.6;
    procedure PrintNum(p_num number) as
    begin
        dbms_output.put_line(p_num);
    end;
begin
    PrintNum(l_num);
end;
36,6
PL/SQL procedure successfully completed.
SQL> -- 3
SQL> declare
    procedure PrintNum(p_num number) as
    begin
        dbms_output.put_line(p_num);
    end;
begin
    PrintNum(36.5 + 0.1);
end;
36,6
PL/SQL procedure successfully completed.
SQL> -- 4
SQL> declare
    procedure PrintNum(p_num number) as
    begin
        dbms_output.put_line(p_num);
    end;
begin
    PrintNum(36.6);
end;
36,6
PL/SQL procedure successfully completed.

Oracle SQL Developer 4.1.5.21 Build MAIN-21.78 - все работает как ожидалось
Код: 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.
SQL> set echo on
SQL> set serveroutput on
SQL> alter session set nls_numeric_characters = ",.";

Session altered.

SQL> -- 1
SQL> select 36.6 from dual;

      36.6
----------
      36,6

SQL> -- 2
SQL> declare
l_num number := 36.6;
    procedure PrintNum(p_num number) as
    begin
        dbms_output.put_line(p_num);
    end;
begin
    PrintNum(l_num);
end;
/

PL/SQL procedure successfully completed.

36,6

SQL> -- 3
SQL> declare
    procedure PrintNum(p_num number) as
    begin
        dbms_output.put_line(p_num);
    end;
begin
    PrintNum(36.5 + 0.1);
end;
/

PL/SQL procedure successfully completed.

36,6

SQL> -- 4
SQL> declare
    procedure PrintNum(p_num number) as
    begin
        dbms_output.put_line(p_num);
    end;
begin
    PrintNum(36.6);
end;
/

PL/SQL procedure successfully completed.

36,6

Oracle SQL Developer 17.3.0.271 Build 271.2323 - неожиданность
Код: 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.
SQL> set echo on
SQL> set serveroutput on
SQL> 
SQL> alter session set nls_numeric_characters = ",.";

Session altered.

SQL> 
SQL> -- 1
SQL> select 36.6 from dual;

      36.6
----------
36,6      

SQL> 
SQL> -- 2
SQL> declare
  2  l_num number := 36.6;
  3      procedure PrintNum(p_num number) as
  4      begin
  5          dbms_output.put_line(p_num);
  6      end;
  7  begin
  8      PrintNum(l_num);
  9  end;
 10  /
36,6


PL/SQL procedure successfully completed.

SQL> 
SQL> -- 3
SQL> declare
  2      procedure PrintNum(p_num number) as
  3      begin
  4          dbms_output.put_line(p_num);
  5      end;
  6  begin
  7      PrintNum(36.5 + 0.1);
  8  end;
  9  /
36,6


PL/SQL procedure successfully completed.

SQL> 
SQL> -- 4
SQL> declare
  2      procedure PrintNum(p_num number) as
  3      begin
  4          dbms_output.put_line(p_num);
  5      end;
  6  begin
  7      PrintNum(36.6);
  8  end;
  9  /

Error starting at line : 33 in command -
declare
    procedure PrintNum(p_num number) as
    begin
        dbms_output.put_line(p_num);
    end;
begin
    PrintNum(36.6);
end;
Error report -
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at line 7
06502. 00000 -  "PL/SQL: numeric or value error%s"
*Cause:    An arithmetic, numeric, string, conversion, or constraint error
           occurred. For example, this error occurs if an attempt is made to
           assign the value NULL to a variable declared NOT NULL, or if an
           attempt is made to assign an integer larger than 99 to a variable
           declared NUMBER(2).
*Action:   Change the data, how it is manipulated, or how it is declared so
           that values do not violate constraints.


Запросы 1 - 3 с каждого клиента отрабатывают нормально. Пытаемся понять, почему 4-ый падает на Oracle SQL Developer 17.3.0.
Первый запрос - SQL. С ним проблем не возникло. Все остальное - PL/SQL.

Во 2 запросе мы явно определили переменную number и передаем ее функции. В 3-м запросе, используя операцию сложения, намекаем, что параметр, как результат сложения - число. А вот в 4-м этого намека уже не делаем, и, судя по ошибке, oracle считает, что наш литерал - строка, и на этапе вызова функции пытается преобразовать его в число и спотыкается на nls_numeric_characters.

Снимаем трассировку с проблемного вызова и убеждаемся в нашем предположении.
Код: 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.
=====================
PARSING IN CURSOR #329891744 len=261 dep=0 uid=48 oct=47 lid=48 tim=793884346175 hv=241631631 ad='7ffd8950cf20' sqlid='9frjtqh76f0cg'
DECLARE SqlDevBind1Z_1 VARCHAR2(32767):=:SqlDevBind1ZInit1;  BEGIN declare
    procedure PrintNum(p_num number) as
    begin
        dbms_output.put_line(p_num);
    end;
begin
    PrintNum(TO_NUMBER( SqlDevBind1Z_1));
end;
 :AUXSQLDBIND1:=SqlDevBind1Z_1;  END;
END OF STMT
PARSE #329891744:c=0,e=41,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=0,tim=793884346175
BINDS #329891744:
 Bind#0
  oacdty=01 mxl=16386(16000) mxlc=00 mal=00 scl=00 pre=00
  oacflg=03 fl2=1000010 frm=01 csi=873 siz=16392 off=0
  kxsbbbfp=13c77fc0  bln=16386  avl=04  flg=05
  value="36.6"
 Bind#1
  oacdty=01 mxl=16386(16000) mxlc=00 mal=00 scl=00 pre=00
  oacflg=03 fl2=1000010 frm=01 csi=873 siz=16392 off=0
  kxsbbbfp=13bfbff8  bln=16386  avl=04  flg=05
  value="36.6"
EXEC #329891744:c=0,e=8801,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=0,tim=793884371225
ERROR #2:err=6502 tim=793884371253


...
Рейтинг: 0 / 0
03.10.2017, 00:42
    #39529749
_Nikotin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle SQL Developer 17.3.0: Кривой биндинг переменных
AmKad,

Какой-то прям client-side cursor sharing
...
Рейтинг: 0 / 0
03.10.2017, 00:53
    #39529751
_Nikotin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle SQL Developer 17.3.0: Кривой биндинг переменных
Похоже на новую фичу-хреничу More secure
...
Рейтинг: 0 / 0
03.10.2017, 01:25
    #39529753
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle SQL Developer 17.3.0: Кривой биндинг переменных
AmKad,

он ответил:
Код: plsql
1.
set secureliterals off
...
Рейтинг: 0 / 0
03.10.2017, 10:37
    #39529932
ментяра
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle SQL Developer 17.3.0: Кривой биндинг переменных
AmKad, коллега, если у вас на рабочем месте установлен Toad, зачем вам эта джавовая поделка?
...
Рейтинг: 0 / 0
03.10.2017, 10:54
    #39529952
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle SQL Developer 17.3.0: Кривой биндинг переменных
ментяра,

На текущей работе Toad-а нет. Приходится юзать альтернативы. Toad стоит только дома.
...
Рейтинг: 0 / 0
03.10.2017, 11:47
    #39530030
ментяра
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle SQL Developer 17.3.0: Кривой биндинг переменных
AmKad,

А пригласите меня на чашечку чая, просто на чеки оплаты лицензии посмотреть? По какому адресу выезжать?
...
Рейтинг: 0 / 0
03.10.2017, 13:13
    #39530111
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle SQL Developer 17.3.0: Кривой биндинг переменных
SQL Developer 4.2.0.17.089
хрень та же
TO_NUMBER(SQLDEVBIND1Z_1)
чтобы выявить, просто добавил
PrintNum(p_num OUT number)

PrintNum(+36.6) - конечно работает.
...
Рейтинг: 0 / 0
03.10.2017, 14:17
    #39530168
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle SQL Developer 17.3.0: Кривой биндинг переменных
Недавно сюда жаловался, судя по всему по той же причине: подразумевает текст.
Введя без кавычек :AA:
Код: plaintext
select to_date( :AA, 'dd.mm') from dual
всё ок. А Тоад просто позволяет явно указать тип при вводе.
...
Рейтинг: 0 / 0
03.10.2017, 23:10
    #39530524
andzhi4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle SQL Developer 17.3.0: Кривой биндинг переменных
В sqlcl та же лажа. Ну то есть еще одно свидетельство, что это кусок кода девелопера без графической морды

Код: 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.
$ sql andzhi4/password@localhost:1521/rabbix

SQLcl: Release 12.2.0.1.0 RC on Tue Oct 03 23:06:09 2017

Copyright (c) 1982, 2017, Oracle.  All rights reserved.

Last Successful login time: Tue Oct 03 2017 23:06:09 +03:00

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production


NAME                 OPEN_MODE 
-------------------- ----------
RABBIX               READ WRITE


SQL> set serveroutput on;
SQL> alter session set nls_numeric_characters = ",.";

Session altered.

SQL> declare
  2      procedure PrintNum(p_num number) as
  3      begin
  4          dbms_output.put_line(p_num);
  5      end;
  6  begin
  7      PrintNum(36.6);
  8  end;
  9  /

Error starting at line : 1 in command -
declare
    procedure PrintNum(p_num number) as
    begin
        dbms_output.put_line(p_num);
    end;
begin
    PrintNum(36.6);
end;
Error report -
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at line 7
06502. 00000 -  "PL/SQL: numeric or value error%s"
*Cause:    An arithmetic, numeric, string, conversion, or constraint error
           occurred. For example, this error occurs if an attempt is made to
           assign the value NULL to a variable declared NOT NULL, or if an
           attempt is made to assign an integer larger than 99 to a variable
           declared NUMBER(2).
*Action:   Change the data, how it is manipulated, or how it is declared so
           that values do not violate constraints.
SQL> 

...
Рейтинг: 0 / 0
04.10.2017, 09:27
    #39530587
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle SQL Developer 17.3.0: Кривой биндинг переменных
AmKadOracle SQL Developer 17.3.0.271
Нумерация версий по номеру года всё-таки пугающая штука.

Фактически, перевирается сама концепция major.minor.[.build[.revision[.somebullshit]]]. Печальное зрелище.
...
Рейтинг: 0 / 0
04.10.2017, 12:55
    #39530711
Oracle SQL Developer 17.3.0: Кривой биндинг переменных
envНумерация версий по номеру года всё-таки пугающая штука.Маркетинг посчитал, что напоминание датой заставит тебя быстрее переходить на новое. Но может быть и обратная реакция. Если сейчас постыдно ездить на авто 99го года, то авто 49го года уже шик!
...
Рейтинг: 0 / 0
05.10.2017, 10:24
    #39531273
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle SQL Developer 17.3.0: Кривой биндинг переменных
Если функцию объявить в SQL, то отрабатывает (Oracle SQL Developer 17.2.0.188).
Код: 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.
SQL> set echo on
SQL> set lines 80
SQL> 
SQL> declare
  2      procedure PrintNum(p_num number) as
  3      begin
  4          dbms_output.put_line(p_num);
  5      end;
  6  begin
  7      PrintNum(36.6);
  8  end;
  9  /

Error starting at line : 4 in command -
declare
    procedure PrintNum(p_num number) as
    begin
        dbms_output.put_line(p_num);
    end;
begin
    PrintNum(36.6);
end;
Error report -
ORA-06502: PL/SQL: : ошибка преобразования символа в число ошибка числа или значения
ORA-06512: на  line 7
06502. 00000 -  "PL/SQL: numeric or value error%s"
*Cause:    An arithmetic, numeric, string, conversion, or constraint error
           occurred. For example, this error occurs if an attempt is made to
           assign the value NULL to a variable declared NOT NULL, or if an
           attempt is made to assign an integer larger than 99 to a variable
           declared NUMBER(2).
*Action:   Change the data, how it is manipulated, or how it is declared so
           that values do not violate constraints.
SQL> 
SQL> with 
  2  function GetNum(p_num number) return varchar2 as
  3  begin
  4      return to_char(p_num);
  5  end;
  6  select GetNum(36.6)
  7  from dual;
  8  /

GETNUM(36.6)                                                                    
--------------------------------------------------------------------------------
36,6
...
Рейтинг: 0 / 0
05.10.2017, 12:24
    #39531388
Oracle SQL Developer 17.3.0: Кривой биндинг переменных
AmKad,

пишите об ошибке Jeff-у: https://www.thatjeffsmith.com/ask-a-question/

ПС. насчет отказа от версий в пользу нумерации по годам - кто-то возмущается. А зачем? Я тоже считаю, что лучше постояное улучшение без задрежек и без резких переходов с концепции на концепцию, чем ждать пока выйдет какая-то новая версия продукта и придется все менять. Также присутствует маркетинг - привязывают пользователя к своему продукту, не давая спрыгнуть на чужие. Примерно так же у JetBrains.
...
Рейтинг: 0 / 0
10.10.2017, 09:59
    #39533868
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle SQL Developer 17.3.0: Кривой биндинг переменных
Заодно спрошу.
SQL Developer 4.2.0.17
Экспорт в эксэл результатов запроса. Столб с датами экспортируется как текст (с кавычкой впереди). В ранних версиях также было? сейчас так же? побороть настройками девелопера?
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Oracle SQL Developer 17.3.0: Кривой биндинг переменных / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]