Dans cette réponse, je vais essayer de fournir des informations provenant de ressources officielles
(1) Le littéral du texte N''
N''
est utilisé pour convertir une chaîne en NCHAR
ou NVARCHAR2
type de données
Selon cette documentation Oracle Oracle - Littéraux
La syntaxe des littéraux de texte est la suivante :
où
N
oun
spécifie le littéral en utilisant le jeu de caractères national (NCHAR
ouNVARCHAR2
données).
Aussi dans ce deuxième article Oracle - Types de données
Le N'String'
est utilisé pour convertir une chaîne en NCHAR
type de données
Extrait de l'article ci-dessus :
L'exemple suivant compare le
translated_description
colonne dupm.product_descriptions
table avec une chaîne de jeu de caractères nationaux :SELECT translated_description FROM product_descriptions WHERE translated_name = N'LCD Monitor 11/PM';
(2) Le littéral U''
U''
est utilisé pour gérer les littéraux de chaîne SQL NCHAR dans Oracle Call Interface (OCI)
Basé sur cette documentation Oracle Programmation avec Unicode
L'interface d'appel d'Oracle (OCI) est l'API de niveau le plus bas utilisée par le reste des produits d'accès à la base de données côté client. Il fournit un moyen flexible pour les programmes C/C++ d'accéder aux données Unicode stockées dans SQL
CHAR
etNCHAR
Types de données. À l'aide d'OCI, vous pouvez spécifier par programmation le jeu de caractères (UTF-8, UTF-16 et autres) pour les données à insérer ou à récupérer. Il accède à la base de données via Oracle Net.
OCI est l'API de niveau le plus bas pour accéder à une base de données, elle offre donc les meilleures performances possibles.
Gestion des littéraux de chaîne SQL NCHAR dans OCI
Vous pouvez l'activer en définissant la variable d'environnement
ORA_NCHAR_LITERAL_REPLACE
àTRUE
. Vous pouvez également obtenir ce comportement par programmation en utilisant leOCI_NCHAR_LITERAL_REPLACE_ON
etOCI_NCHAR_LITERAL_REPLACE_OFF
modes dansOCIEnvCreate()
etOCIEnvNlsCreate()
. Ainsi, par exemple,OCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_ON)
activeNCHAR
remplacement littéral, tandis queOCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_OFF)
l'éteint.[...] Notez que, lorsque le
NCHAR
le remplacement littéral est activé,OCIStmtPrepare
etOCIStmtPrepare2
transformeraN'
littéraux avecU'
littéraux dans le texte SQL et stocke le texte SQL résultant dans le descripteur d'instruction . Ainsi, si l'application utiliseOCI_ATTR_STATEMENT
pour récupérer le texte SQL de l'OCI
handle d'instruction, le texte SQL renverraU'
au lieu deN'
comme spécifié dans le texte original .
(3) Réponse à votre question
Du point de vue des types de données, il n'y a pas de différence entre les deux requêtes fournies