с этой средой:
Oracle 11g Database 11.2.0.3.0 64bit производства
PHP версия: 5.3.3
OCI8 Version 2.0.7
I иметь веб-сайт на языке Php, который выполняет:
ALTER SESSION SET NLS_DATE_FORMAT = ''YYYY/MM/DD HH24:MI:SS"
при загрузке первой страницы; затем выполняет пакет Oracle (ZZZJOB):
$ORA_DB = oci_pconnect(ORA_USER, ORA_PASSWORD, ORA_TNSCATALOG, "UTF8");
--$sql="BEGIN ZZZJOB.RUN_ZZZTEST_JOB; END";
$stid = oci_parse($ORA_DB, html_entity_decode($sql));
$r = oci_execute($stid, OCI_DEFAULT);
Затем, после возвращения пакета, то новое значение по умолчанию NLS_DATE_FORMAT в веб-страницы Php (выполнение других запросов) является база данных по умолчанию, то есть DD-Mon-YYYY HH24: MI: SS
Как предотвратить выполнение (любого) пакета изменения формата nls, используемого Php?
Похоже, что предыдущее соединение/сеанс Php заменяется на «соединение/сеанс пакета Oracle».
Спасибо,
ИгорьPhp, Oracle пакетов и NLS Настройки
1
A
ответ
0
Наконец, я нашел решение: если я пишу:
DBMS_SCHEDULER.run_job ('ZZZTEST_JOB', TRUE); - по умолчанию
изменены настройки NLS; вместо этого, с
DBMS_SCHEDULER.run_job ('ZZZTEST_JOB', FALSE);
никаких изменений не сделано.
Итак, мне нужно запустить задание в другом сеансе, а не в сеансе процедуры, с которой был вызван.
Смотрите также https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_sched.htm#i1013568 Спасибо,
Игорь
0
NS_DATE_FORMAT является параметром, который зависит от сеанса. Обычная практика заключается в том, чтобы написать триггер входа в систему в зависимости от требования приложения, чтобы установить этот параметр для записи в сеансе входа в систему. Это может быть сделано ниже образом:
CREATE OR REPLACE TRIGGER CHANGE_DATE_FORMAT
AFTER LOGON ON DATABASE
WHEN (
USER='Oracle Package Connection/Session User'
)
begin
execute immediate 'alter session set nls_date_format = ''YYYY/MM/DD HH24:MI:SS'' ';
end ;
/
Смежные вопросы
- 1. Настройки среды NLS и Oracle Managed ODP.Net
- 2. Rails 3 и Oracle: NLS Настройки отклоняют десятичный разделитель
- 3. Oracle 10g Параметры NLS
- 4. Java и настройки локализации & классам пакетов
- 5. Большое количество пакетов Oracle
- 6. Session против Instance против базы данных в Oracle Настройке NLS
- 7. Плюсы и минусы использования пакетов в Oracle
- 8. Oracle Case Нечувствительность настройки
- 9. ORACLE настройки производительности БД
- 10. Dojo Глобализация и NLS ключи
- 11. Развертывание пакетов plsql в oracle
- 12. Настройка NLS для многоязычных языков
- 13. Настройка PHP, Apache и Oracle
- 14. ОШИБКА OCIEnvNlsCreate. Проверьте ORACLE_HOME (Linux) env var или PATH (Windows) и/или настройки NLS, разрешения и т. Д.
- 15. Предлагаемые настройки сокета TCP для малой задержки и небольших пакетов
- 16. Транзакция PHP и Oracle
- 17. Помощи для настройки SQL - ORACLE
- 18. AVAYA Proactive Contact Oracle Настройки
- 19. Получение пакетов UDP-пакетов в PHP
- 20. Менеджер пакетов PHP
- 21. Объем NLS selfStart функций
- 22. Ограничения для коэффициентов nls
- 23. Использование «прогнозирования» в nls
- 24. NLS не выполняет хорошо
- 25. R: NLS неправильно сходится
- 26. ORACLE - Экспорт процедур/пакетов в файл
- 27. Функция n nls и начальные значения
- 28. NLS - ошибка сходимости
- 29. R nls unique gradient
- 30. Ошибка при затягивании NLS
Спасибо за ваше предложение; Я заметил, что если я выполню запрос из Php, nls не будет затронут, но если я запустим пакет, то следующий запрос будет изменен. Важное примечание: пакеты выполняются при вызове хранимой процедуры, выполняющей задание, выполняющее пакет (то есть другой сеанс запускает пакет). – Yellow75
Запуск пакета «прямо» (без задания) не изменяет настройки nls. – Yellow75
как вы создаете работу? Используете ли вы DBMS_SCHEDULER? Задания DBMS_SCHEDULER должны использовать те же настройки nls, что и при создании задания. Опишите, как вы вызываете/создаете свою работу. – dcieslak