На этих страницах обе переменные привязки состояния должны быть «допустимыми идентификаторами Oracle»
В документации, которую я нашел, конкретно не сказано, что точка может
быть частью юридического идентификатора. Я был в состоянии использовать точку в обоих
имя таблицы и как имя переменной связывания, но похоже, что это
не рекомендуется.
СТРАНИЦЫ, КОТОРЫЕ СЛЕДУЮТ ПЕРЕМЕННЫМИ КОНВЕНЦИЯМИ НАЗВАНИЯ
(На этих страницах указывается, что переменная связывания должна быть допустимым идентификатором):
http://www.utoug.org/i/doc/concept_bind_var.htm
http://docs.oracle.com/cd/E23903_01/doc/doc.41/e21674/concept_ses_val.htm#BEIEGCCC
СТРАНИЦА, ОПИСЫВАЮЩАЯ ЮРИДИЧЕСКИХ ИДЕНТИФИКАТОРОВ:
http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements008.htm
Я не смог найти на этой странице ничего, что говорило бы, что точка является законной
часть идентификатора (например, таблицы или имени переменной связывания), кроме ссылки на БД.
Хотя $ и # допустимы, они даже не рекомендуются, поэтому "."
может работать, но явно не рекомендуется (даже не упоминается как
эта страница)
Имена переменных связывания должны соответствовать имени элемента.
Имена переменных связывания не чувствительны к регистру.
Имена переменных связывания не могут быть длиннее 30 символов (то есть они должны быть действительным идентификатором Oracle).
Я знаю, что действительный идентификатор ORACLE (основанный на определении ORACLE
юридического идентификатора) не может начинаться с цифры,
и может иметь НЕКОТОРЫЕ специальные символы, такие как $ и. но если есть
специальные символы, идентификатор ДОЛЖЕН быть в двойных кавычках.
Мне удалось получить идентификатор с точкой для работы в привязке
переменная, но я должен был поставить двойные кавычки вокруг привязки
переменная, когда переменная связывания содержит точку.
create or replace function F0416B
RETURN VARCHAR2
is
V_STMT VARCHAR2(1999);
V_RESULT VARCHAR2(1999);
BEGIN
V_STMT := 'INSERT INTO TEST0411(FIELD1, FIELD2) VALUES ( :"A.1" , :"A.2")';
EXECUTE IMMEDIATE V_STMT USING 'AS201', 'AS202';
RETURN 'INSERT-OK';
COMMIT;
EXCEPTION
WHEN OTHERS THEN RETURN SQLERRM;
END;
Это может работать, но в соответствии с вышеуказанной документацией точка / точка
в переменной связывания или другом имени объекта недопустимо / не рекомендуется ...
Это предложение на странице именования объектов схемы ORACLE,
говорит мне это:
Идентификаторы без кавычек могут содержать только буквенно-цифровые символы из набора символов вашей базы данных, а также подчеркивание (_), знак доллара ($) и знак фунта (#). Ссылки на базы данных также могут содержать точки (.) И знаки «at» (@). Oracle настоятельно не рекомендует использовать $ и # в идентификаторах без кавычек.