Nesta resposta, tentarei fornecer informações de recursos oficiais
(1) O texto N'' Literal
N''
é usado para converter uma string para NCHAR
ou NVARCHAR2
tipo de dados De acordo com esta documentação Oracle Oracle - Literais
A sintaxe dos literais de texto é a seguinte:
ondeN
oun
especifica o literal usando o conjunto de caracteres nacional (NCHAR
ouNVARCHAR2
dados).
Também neste segundo artigo Oracle - Tipos de dados
O
N'String'
é usado para converter uma string para NCHAR
tipo de dados Do artigo listado acima:
O exemplo a seguir compara atranslated_description
coluna dopm.product_descriptions
tabela com uma string de conjunto de caracteres nacional :
SELECT translated_description FROM product_descriptions WHERE translated_name = N'LCD Monitor 11/PM';
(2) O U'' Literal
U''
é usado para lidar com os literais de string SQL NCHAR no Oracle Call Interface (OCI) Com base nesta documentação da Oracle Programação com Unicode
A interface de chamada da Oracle (OCI) é a API de nível mais baixo que o restante dos produtos de acesso ao banco de dados do lado do cliente usam. Ele fornece uma maneira flexível para programas C/C++ acessarem dados Unicode armazenados em SQLCHAR
eNCHAR
tipos de dados. Usando OCI, você pode especificar programaticamente o conjunto de caracteres (UTF-8, UTF-16 e outros) para os dados a serem inseridos ou recuperados. Ele acessa o banco de dados através do Oracle Net.
OCI é a API de nível mais baixo para acessar um banco de dados, por isso oferece o melhor desempenho possível.
Como lidar com literais de string SQL NCHAR em OCI
Você pode ativá-lo definindo a variável de ambienteORA_NCHAR_LITERAL_REPLACE
paraTRUE
. Você também pode obter esse comportamento programaticamente usando oOCI_NCHAR_LITERAL_REPLACE_ON
eOCI_NCHAR_LITERAL_REPLACE_OFF
modos emOCIEnvCreate()
eOCIEnvNlsCreate()
. Assim, por exemplo,OCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_ON)
ativaNCHAR
substituição literal, enquantoOCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_OFF)
desliga.
[...] Observe que, quando oNCHAR
substituição literal está ativada,OCIStmtPrepare
eOCIStmtPrepare2
transformaráN'
literais comU'
literais no texto SQL e armazenar o texto SQL resultante no identificador de instrução . Assim, se o aplicativo usaOCI_ATTR_STATEMENT
para recuperar o texto SQL doOCI
identificador de instrução, o texto SQL retornaráU'
em vez deN'
conforme especificado no texto original .
(3) Resposta para sua pergunta
Da perspectiva dos tipos de dados, não há diferença entre as duas consultas fornecidas