Какие символы разрешены в заполнителях параметров связывания Oracle? - PullRequest
5 голосов
/ 13 октября 2011

Может ли кто-нибудь указать мне, где перечислены символы, разрешенные для имени переменной связывания?Я провел несколько часов, копаясь в документах Oracle SQL, но безрезультатно.

Я имею в виду ": id" в следующем:

SELECT * FROM mytable WHERE id = :id

Например, можно ли использовать точку как ": some.id"?Будет ли он работать так же, как версия без точки?

Ответы [ 2 ]

2 голосов
/ 17 апреля 2012

На этих страницах обе переменные привязки состояния должны быть «допустимыми идентификаторами 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 настоятельно не рекомендует использовать $ и # в идентификаторах без кавычек.

0 голосов
/ 20 июля 2012

У меня также были проблемы с поиском официального документа Oracle для этого: http://docs.oracle.com/cd/E14072_01/appdev.112/e10646/oci04sql.htm#i420655

Кроме того, оказывается, что вы можете указывать заполнители (: "_ normalinvalid"), и тогда большинство правил, перечисленных в предыдущей ссылке, перестают быть актуальными. Я не смог найти ни одного доктора Oracle, предлагающего это предложение; просто намеки по всему интернету.

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