В този отговор ще се опитам да предоставя информация от официални ресурси
(1) Текстовият литерал N''
N'' се използва за преобразуване на низ в NCHAR или NVARCHAR2 тип данни
Според тази документация на Oracle Oracle – Литерали
Синтаксисът на текстовите литерали е както следва:
където
Nилиnуказва литерала, използвайки националния набор от знаци (NCHARилиNVARCHAR2данни).
Също в тази втора статия Oracle – Типове данни
N'String' се използва за преобразуване на низ в NCHAR тип данни
От статията, изброена по-горе:
Следващият пример сравнява
translated_descriptionколона наpm.product_descriptionsтаблица сниз за набор от национални знаци :SELECT translated_description FROM product_descriptions WHERE translated_name = N'LCD Monitor 11/PM';
(2) Литерала U''
U'' се използва за обработка на SQL NCHAR низови литерали в Oracle Call Interface (OCI)
Въз основа на тази документация на Oracle Програмиране с Unicode
Интерфейсът за повикване на Oracle (OCI) е API от най-ниско ниво, който използват останалите продукти за достъп до база данни от страна на клиента. Той предоставя гъвкав начин за C/C++ програми за достъп до Unicode данни, съхранявани в SQL
CHARиNCHARтипове данни. С помощта на OCI можете програмно да зададете набора от знаци (UTF-8, UTF-16 и други) за данните, които да бъдат вмъкнати или извлечени. Той осъществява достъп до базата данни чрез Oracle Net.
OCI е API от най-ниско ниво за достъп до база данни, така че предлага най-добрата възможна производителност.
Обработване на SQL NCHAR низови литерали в OCI
Можете да го включите, като зададете променливата на средата
ORA_NCHAR_LITERAL_REPLACEдоTRUE. Можете също да постигнете това поведение програмно, като използватеOCI_NCHAR_LITERAL_REPLACE_ONиOCI_NCHAR_LITERAL_REPLACE_OFFрежими вOCIEnvCreate()иOCIEnvNlsCreate(). Така, например,OCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_ON)включваNCHARбуквална замяна, докатоOCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_OFF)го изключва.[...] Имайте предвид, че когато
NCHARбуквалната замяна е включена,OCIStmtPrepareиOCIStmtPrepare2ще трансформираN'литерали сU'литерали в SQL текста и съхранявайте получения SQL текст в манипулатор на израза . По този начин, ако приложението използваOCI_ATTR_STATEMENTза да извлечете SQL текста отOCIманипулатор на оператор, текстът на SQL ще върнеU'вместоN'както е посочено в оригиналния текст .
(3) Отговор на вашия въпрос
От гледна точка на типовете данни, няма разлика между двете предоставени заявки
