Невозможно выбрать переменную из двойной таблицы - PullRequest
0 голосов
/ 07 апреля 2020

Может кто-нибудь сказать, что здесь ошибка. Я не могу запустить ниже статуса.

SELECT to_char (add_months (sysdate, -1), 'Month') INTO Mon из двойного;

Ошибка: ORA-00905: отсутствует ключевое слово 00905. 00000 - «отсутствует ключевое слово»

Ответы [ 2 ]

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

Это будет работать внутри хранимой процедуры.

Если вы хотите выполнить его как обычный запрос sql, удалите INTO или замените INTO на AS:

SELECT to_char(add_months(sysdate,-1),'Month') AS Mon from dual;
0 голосов
/ 07 апреля 2020

Ваш запрос работает в PL / SQL:

DECLARE
  mon VARCHAR2(9);
BEGIN
  SELECT to_char(add_months(sysdate,-1),'Month') INTO Mon from dual;
  DBMS_OUTPUT.PUT_LINE( mon );
END;
/

Выходы:

March    

Однако вам не нужно использовать SELECT и может сделать это полностью в PL / SQL (без переключения контекста на SQL):

DECLARE
  mon VARCHAR2(9);
BEGIN
  mon := to_char(add_months(sysdate,-1),'Month');
  DBMS_OUTPUT.PUT_LINE( mon );
END;
/

или, что еще лучше, указав параметры NLS в запросе, чтобы он будут давать те же ответы независимо от чьих-либо настроек в своем сеансе:

DECLARE
  mon VARCHAR2(9);
BEGIN
  mon := to_char(add_months(sysdate,-1),'Month','NLS_DATE_LANGUAGE=American');
  DBMS_OUTPUT.PUT_LINE( mon );
END;
/

Если вы хотите сделать это в SQL (а не в контексте PL / SQL), тогда вы не можете использовать INTO:

SELECT to_char(
         add_months(sysdate,-1),
         'Month',
         'NLS_DATE_LANGUAGE=American'
       ) AS mon
FROM   DUAL

Какие выходы:

| MON       |
| :-------- |
| March     |

db <> Fiddle здесь

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