Есть ли способ встроить запрос на изменение в oracle sql процедуру? - PullRequest
1 голос
/ 23 апреля 2020

Я пытаюсь создать процедуру, которую я могу вызвать, которая изменила бы формат даты, и у меня возникли некоторые проблемы, и я мог бы использовать некоторую помощь.

Если я попробую этот код:

create or replace PROCEDURE DATE_SESSION IS 

BEGIN
    ALTER SESSION SET NLS_date_format = 'MM/DD/YYYY';
END;

Я получу эту ошибку:

Error starting at line : 1 in command -
DATE_SESSION
Error report -
Unknown Command

И если я попробую этот код:

create or replace PROCEDURE DATE_SESSION IS 

    BEGIN
        EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_date_format = 'MM/DD/YYYY';';
    END;

И затем выполните это с:

DATE_SESSION

Я получаю эту ошибку:

Error starting at line : 1 in command -
DATE_SESSION
Error report -
Unknown Command

Любое понимание будет с благодарностью.

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

Вы должны использовать двойной апостроф.
Я не рекомендую отбрасывать временную составляющую значений дат.

BEGIN
    EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_date_format=''MM/DD/YYYY''';
END;
0 голосов
/ 23 апреля 2020

Если вы собираетесь использовать много динамических c SQL, стоит изучить альтернативный синтаксис цитирования. Этот синтаксис позволяет нам встраивать код в код, не удваивая количество одинарных кавычек. Это делает код более читабельным и проще для тестирования.

create or replace procedure date_session is 
begin
    execute immediate
    q'[
        alter session set nls_date_format = 'MM/DD/YYYY'
    ]';
end;
/

Однако мне интересно, является ли этот вопрос проблемой XY . Изменение формата даты предназначено для того, чтобы разные клиенты могли просматривать данные в своем предпочтительном формате. Установка формата внутри хранимой процедуры заставляет меня задуматься, не настроена ли она на исправление какой-либо программы, которая по глупости приняла определенный формат даты c. Вы должны никогда изменять формат даты на уровне сеанса, чтобы программа работала. Если это так, лучше изменить исходную программу и удалить любые неявные преобразования даты. (С другой стороны, мы не всегда можем контролировать исходный код, поэтому такие решения иногда необходимы.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...