powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как передать значение NULL bind-переменной в DBMS_SQLTUNE.CREATE_TUNING_TASK?
4 сообщений из 4, страница 1 из 1
Как передать значение NULL bind-переменной в DBMS_SQLTUNE.CREATE_TUNING_TASK?
    #39977696
rushchel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не могу передать NULL, получаю ORA-01008: не все переменные привязаны. Есть ли решение?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
declare
  v_result varchar2(100);
begin
  v_result := dbms_sqltune.create_tuning_task(
    sql_text   => 'select * from dual where 1 = :b1 and 2 = :b2 and (:b3 is null or 3 = :b3)'
   ,bind_list  => sql_binds(anydata.ConvertNumber(1),anydata.ConvertNumber(2),anydata.ConvertNumber(null))
   ,time_limit => 60
   ,task_name  => 'tt_my_task'
  );
  v_result := dbms_sqltune.execute_tuning_task(task_name => 'tt_my_task');
end;
/
select dbms_sqltune.report_tuning_task('tt_my_task') from dual;
begin dbms_sqltune.drop_tuning_task('tt_my_task'); end;
/


Код: 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.
SQL> select banner from v$version
  2  /

BANNER
--------------------------------------------------------------------------------
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production

SQL> declare
  2    v_result    varchar2(100);
  3  begin
  4    v_result := dbms_sqltune.create_tuning_task(
  5      sql_text   => 'select * from dual where 1 = :b1 and 2 = :b2 and (:b3 is null or 3 = :b3)'
  6     ,bind_list  => sql_binds(anydata.ConvertNumber(1),anydata.ConvertNumber(2),anydata.ConvertNumber(null))
  7     ,time_limit => 60
  8     ,task_name  => 'tt_my_task'
  9    );
 10    v_result := dbms_sqltune.execute_tuning_task(task_name => 'tt_my_task');
 11  end;
 12  /

SQL> select dbms_sqltune.report_tuning_task('tt_my_task') from dual
  2  /

DBMS_SQLTUNE.REPORT_TUNING_TAS
--------------------------------------------------------------------------------
GENERAL INFORMATION SECTION
-------------------------------------------------------------------------------
Tuning Task Name   : tt_my_task
Tuning Task Owner  : SYSTEM
Workload Type      : Single SQL Statement
Scope              : COMPREHENSIVE
Time Limit(seconds): 60
Completion Status  : COMPLETED
Started at         : 07/09/2020 07:32:39
Completed at       : 07/09/2020 07:33:31
-------------------------------------------------------------------------------
Schema Name: SYSTEM
SQL ID     : dp45w53chrvyu
SQL Text   : select * from dual where 1 = :b1 and 2 = :b2 and (:b3 is null or
             3 = :b3)
Bind Variables :
 1 -  (NUMBER):1
 2 -  (NUMBER):2
-------------------------------------------------------------------------------
ERRORS SECTION
-------------------------------------------------------------------------------
- ORA-01008: не все переменные привязаны
-------------------------------------------------------------------------------
...
Рейтинг: 0 / 0
Как передать значение NULL bind-переменной в DBMS_SQLTUNE.CREATE_TUNING_TASK?
    #39977718
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привязка идет не по именам переменных, а по порядку.
У вас тут четыре переменных.
Поэтому и привязать надо четыре значения
Код: plsql
1.
2.
3.
4.
5.
,bind_list  => sql_binds(
   anydata.ConvertNumber(1)
 , anydata.ConvertNumber(2)
 , anydata.ConvertNumber(null)
 , anydata.ConvertNumber(null))


P.S. Если ставить после запятых пробел, текст будет удобнее читать, а значит и ошибок будет меньше! :-)
...
Рейтинг: 0 / 0
Как передать значение NULL bind-переменной в DBMS_SQLTUNE.CREATE_TUNING_TASK?
    #39977739
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверил на Oracle Database EE 19.7.
Работает.

Листинг выполнения
Код: 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.
SQL> SET ECHO ON;
SQL> SET LONG 1000000;
SQL> SET SERVEROUTPUT ON;
SQL> 
SQL> declare
  2    v_result    varchar2(100);
  3  begin
  4  dbms_output.put_line('-- BEGIN --');
  5     dbms_sqltune.drop_tuning_task(task_name  => 'tt_my_task');
  6     v_result := dbms_sqltune.create_tuning_task(
  7       sql_text   => 'select * from dual where 1 = :b1 and 2 = :b2 and (:b3 is null or 3 = :b3)'
  8     , bind_list  => sql_binds(
  9          anydata.ConvertNumber(1), anydata.ConvertNumber(2)
 10        , anydata.ConvertNumber(NULL), anydata.ConvertNumber(NULL) )
 11     , time_limit => 60
 12     , task_name  => 'tt_my_task');
 13  dbms_output.put_line('1-'||v_result);
 14    v_result := dbms_sqltune.execute_tuning_task(task_name => 'tt_my_task');
 15  dbms_output.put_line('2-'||v_result);
 16  end;
 17  /
-- BEGIN --
1-tt_my_task
2-EXEC_47


PL/SQL procedure successfully completed.

SQL> select dbms_sqltune.report_tuning_task('tt_my_task') from dual
  2  /

DBMS_SQLTUNE.REPORT_TUNING_TASK('TT_MY_TASK')                                   
--------------------------------------------------------------------------------
GENERAL INFORMATION SECTION
-------------------------------------------------------------------------------
Tuning Task Name   : tt_my_task
Tuning Task Owner  : LUX
Workload Type      : Single SQL Statement
Scope              : COMPREHENSIVE
Time Limit(seconds): 60
Completion Status  : COMPLETED
Started at         : 07/09/2020 11:35:00
Completed at       : 07/09/2020 11:35:10


DBMS_SQLTUNE.REPORT_TUNING_TASK('TT_MY_TASK')                                   
--------------------------------------------------------------------------------
-------------------------------------------------------------------------------
Schema Name   : LUX
Container Name: VSU_LUX
SQL ID        : dp45w53chrvyu
SQL Text      : select * from dual where 1 = :b1 and 2 = :b2 and (:b3 is null
                or 3 = :b3)
Bind Variables: :
 1 -  (NUMBER):1
 2 -  (NUMBER):2

-------------------------------------------------------------------------------

DBMS_SQLTUNE.REPORT_TUNING_TASK('TT_MY_TASK')                                   
--------------------------------------------------------------------------------
There are no recommendations to improve the statement.

-------------------------------------------------------------------------------



P. S. Конечно, вы понимаете, что легальное использование этих программ требует лицензирования Diagnostics Pack и Tuning Pack ?!
...
Рейтинг: 0 / 0
Как передать значение NULL bind-переменной в DBMS_SQLTUNE.CREATE_TUNING_TASK?
    #39977764
rushchel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL*Plus, понял. Спасибо!
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как передать значение NULL bind-переменной в DBMS_SQLTUNE.CREATE_TUNING_TASK?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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