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ù
Nounspécifie le littéral en utilisant le jeu de caractères national (NCHARouNVARCHAR2donné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_descriptioncolonne dupm.product_descriptionstable 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
CHARetNCHARTypes 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_ONetOCI_NCHAR_LITERAL_REPLACE_OFFmodes dansOCIEnvCreate()etOCIEnvNlsCreate(). Ainsi, par exemple,OCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_ON)activeNCHARremplacement littéral, tandis queOCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_OFF)l'éteint.[...] Notez que, lorsque le
NCHARle remplacement littéral est activé,OCIStmtPrepareetOCIStmtPrepare2transformeraN'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_STATEMENTpour récupérer le texte SQL de l'OCIhandle 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
