Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как использовать контекст с регистрозависимым именем? / 11 сообщений из 11, страница 1 из 1
24.11.2020, 00:22
    #40021579
Правильный Вася
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать контекст с регистрозависимым именем?
Наткнулся на странность, очень похожую на баг (проверил в 12.2 и 19.3).
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE OR REPLACE CONTEXT "Ctx" USING Set_Ctx;

CREATE OR REPLACE PROCEDURE Set_Ctx( cName IN VARCHAR2, cValue IN VARCHAR2 ) AS
BEGIN
  dbms_session.set_context( '"Ctx"', cName, cValue );
END;
/
BEGIN
  Set_Ctx( 'f2_value', 'ABC' );
END;
/
SELECT sys_context( '"Ctx"', 'f2_value' ) FROM dual;


Если это попытаться выполнить, то получим ошибку как на картинке.
Т.е. создать такой контекст можно, запросить значения из него можно (sys_context ошибок не вызывает), а вот задать их не получается.

Если же имя контекста сделать регистронезависимым (убрать везде кавычки), то всё работает без проблем.

Как это лечить? Или просто смириться?
Если у кого есть выход на офсаппорт, может, багрепорт выставить?
...
Рейтинг: 0 / 0
24.11.2020, 00:55
    #40021585
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать контекст с регистрозависимым именем?
Вася, у вас какой-то баг по утроению сообщений.

Пока посмотрите, что в доке пишут про имена контекстов.
...
Рейтинг: 0 / 0
24.11.2020, 02:12
    #40021598
Правильный Вася
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать контекст с регистрозависимым именем?
SQL*Plus
Вася, у вас какой-то баг по утроению сообщений.

Браузер залип.

SQL*Plus
посмотрите, что в доке пишут про имена контекстов.

В доке никаких особенных требований нет, всё как для остальных объектов:
Specify the name of the context namespace to create or modify. The name must satisfy the requirements listed in "Database Object Naming Rules".
...
Рейтинг: 0 / 0
24.11.2020, 21:57
    #40021863
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать контекст с регистрозависимым именем?
Правильный Вася,

Какая версия базы?
...
Рейтинг: 0 / 0
24.11.2020, 22:04
    #40021864
кит северных морей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать контекст с регистрозависимым именем?
я в таких случаях разврапливаю пакеты и смотрю, что именно они делают. пользы, как правило, мало, но любопытно.
...
Рейтинг: 0 / 0
24.11.2020, 22:48
    #40021879
graycode
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать контекст с регистрозависимым именем?
Правильный Вася,

А если убрать двойные кавычки из вызовов процедур?
...
Рейтинг: 0 / 0
24.11.2020, 23:27
    #40021886
Правильный Вася
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать контекст с регистрозависимым именем?
SQL*Plus
Какая версия базы?
Так указал же - 12.2 и 19.3

graycodeА если убрать двойные кавычки из вызовов процедур?Сложность в том, что имя контекста будет именно такое, как указано при создании. Т.е. если при создании использовать кавычки и смешанный регистр, а при вызове процедуры кавычки не указать, то ругается, что такого контекста нет (и правда, она тогда всё к верхнему регистру в процедуре приводит, а не как есть берёт).
На самом деле код ошибки, что нет привилегий, но это только потому, что контекст должен быть привязан к процедуре, его устанавливающей. Вот пример:
Код: 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.
Connected to Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 
Connected as u99

SQL> CREATE OR REPLACE CONTEXT "Ctx" USING Set_Ctx;

Context created

SQL> CREATE OR REPLACE PROCEDURE Set_Ctx( cName IN VARCHAR2, cValue IN VARCHAR2 ) AS
  2  BEGIN
  3    dbms_session.set_context( 'Ctx', cName, cValue );
  4  END;
  5  /

Procedure created

SQL> BEGIN
  2    Set_Ctx( 'f2_value', 'ABC' );
  3  END;
  4  /

BEGIN
  Set_Ctx( 'f2_value', 'ABC' );
END;

ORA-01031: привилегий недостаточно
ORA-06512: на  "SYS.DBMS_SESSION", line 130
ORA-06512: на  "U99.SET_CTX", line 3
ORA-06512: на  line 2

SQL> SELECT namespace FROM dba_context WHERE "SCHEMA" = USER AND "PACKAGE" = 'SET_CTX';

NAMESPACE
---------------------------------
Ctx

SQL> SELECT sys_context( '"Ctx"', 'f2_value' ), sys_context( 'Ctx', 'f2_value' ) FROM dual;

SYS_CONTEXT('"CTX"','F2_VALUE'                   SYS_CONTEXT('CTX','F2_VALUE')
------------------------------------------------ -------------------------------------------------

SQL>
...
Рейтинг: 0 / 0
24.11.2020, 23:56
    #40021887
Правильный Вася
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать контекст с регистрозависимым именем?
кит северных морей
я в таких случаях разврапливаю пакеты и смотрю

Конкретно для dbms_session.set_context там только вызов внешней функции. Т.е. это просто обёртка.
...
Рейтинг: 0 / 0
25.11.2020, 00:00
    #40021891
graycode
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать контекст с регистрозависимым именем?
...
Рейтинг: 0 / 0
25.11.2020, 00:10
    #40021896
Правильный Вася
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать контекст с регистрозависимым именем?
graycode,

Прочитал и не вижу, как это соотносится с сабжем.
Я же говорю, что без кавычек всё работает. А с кавычками - нет. А то, что ошибку даёт, так это потому, что такого контекста просто нет, а не потому, что прав нет.
Я же схему не переключаю и не перелогиниваюсь. Всё в одной сессии.
...
Рейтинг: 0 / 0
25.11.2020, 12:47
    #40022038
graycode
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать контекст с регистрозависимым именем?
Правильный Вася,

Похоже что dbms_session не работает с регистрозависимым контекстом.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как использовать контекст с регистрозависимым именем? / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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