powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как использовать контекст с регистрозависимым именем?
11 сообщений из 11, страница 1 из 1
Как использовать контекст с регистрозависимым именем?
    #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
Как использовать контекст с регистрозависимым именем?
    #40021585
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася, у вас какой-то баг по утроению сообщений.

Пока посмотрите, что в доке пишут про имена контекстов.
...
Рейтинг: 0 / 0
Как использовать контекст с регистрозависимым именем?
    #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
Как использовать контекст с регистрозависимым именем?
    #40021863
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный Вася,

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

А если убрать двойные кавычки из вызовов процедур?
...
Рейтинг: 0 / 0
Как использовать контекст с регистрозависимым именем?
    #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
Как использовать контекст с регистрозависимым именем?
    #40021887
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кит северных морей
я в таких случаях разврапливаю пакеты и смотрю

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

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

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


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