powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Oracle SQL Developer 17.3.0: Кривой биндинг переменных
15 сообщений из 15, страница 1 из 1
Oracle SQL Developer 17.3.0: Кривой биндинг переменных
    #39529735
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Демонстрационный скрипт - будем гонять его на нижеприведенных клиентах
Код: 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
Oracle SQL Developer 17.3.0: Кривой биндинг переменных
    #39529749
_Nikotin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad,

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

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

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

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

PrintNum(+36.6) - конечно работает.
...
Рейтинг: 0 / 0
Oracle SQL Developer 17.3.0: Кривой биндинг переменных
    #39530168
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Недавно сюда жаловался, судя по всему по той же причине: подразумевает текст.
Введя без кавычек :AA:
Код: plaintext
select to_date( :AA, 'dd.mm') from dual
всё ок. А Тоад просто позволяет явно указать тип при вводе.
...
Рейтинг: 0 / 0
Oracle SQL Developer 17.3.0: Кривой биндинг переменных
    #39530524
andzhi4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В 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
Oracle SQL Developer 17.3.0: Кривой биндинг переменных
    #39530587
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadOracle SQL Developer 17.3.0.271
Нумерация версий по номеру года всё-таки пугающая штука.

Фактически, перевирается сама концепция major.minor.[.build[.revision[.somebullshit]]]. Печальное зрелище.
...
Рейтинг: 0 / 0
Oracle SQL Developer 17.3.0: Кривой биндинг переменных
    #39530711
envНумерация версий по номеру года всё-таки пугающая штука.Маркетинг посчитал, что напоминание датой заставит тебя быстрее переходить на новое. Но может быть и обратная реакция. Если сейчас постыдно ездить на авто 99го года, то авто 49го года уже шик!
...
Рейтинг: 0 / 0
Oracle SQL Developer 17.3.0: Кривой биндинг переменных
    #39531273
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если функцию объявить в 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
Oracle SQL Developer 17.3.0: Кривой биндинг переменных
    #39531388
AmKad,

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

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


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