Prise en charge d'Avro, OCR et Parquet dans DBMS_CLOUD

Cette section traite de la prise en charge d'Avro, d'OCR et de Parquet DBMS_CLOUD fournie avec la base de données d'IA autonome.

Options de format de l'ensemble DBMS_CLOUD pour Avro, ORC ou Parquet

L'argument de format dans DBMS_CLOUD spécifie le format des fichiers sources.

Les deux façons de spécifier l'argument de format sont les suivantes :

format => '{"format_option" : "format_value" }'

et

format => json_object('format_option' value 'format_value')

Exemples :

format => json_object('type' VALUE 'CSV')

Pour spécifier plusieurs options de format, séparez les valeurs par un ",".

Par exemple :

format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
Option de format Description Syntaxe
regexuri

Lorsque la valeur de regexuri est réglée à TRUE, vous pouvez utiliser des caractères génériques ainsi que des expressions rationnelles dans les noms de fichier des URI de fichier source en nuage.

Les caractères "*" et "?" sont considérés comme des caractères génériques lorsque le paramètre regexuri est réglé à FALSE. Lorsque le paramètre regexuri est réglé à TRUE, les caractères "*" et "?" font partie du modèle d'expression rationnelle spécifié.

Les modèles d'expression rationnelle ne sont pris en charge que pour le nom de fichier ou le chemin du sous-dossier dans vos URI et la correspondance de modèle est identique à celle effectuée par la fonction REGEXP_LIKE. Les modèles d'expression rationnelle ne sont pas pris en charge pour les noms de répertoire.

Pour les tables externes, cette option n'est prise en charge qu'avec les tables créées dans un fichier du stockage d'objets.

Par exemple :

format => JSON_OBJECT('regexuri' value TRUE)

Voir Condition REGEXP_LIKE dans Informations de référence sur le langage SQL pour Oracle Database 19c ou Informations de référence sur le langage SQL pour Oracle Database 26ai pour plus d'informations sur la condition REGEXP_LIKE.

regexuri: True

Valeur par défaut :False

type Spécifie le type de fichier.

type: avro | orc | parquet

schema

Lorsque le schéma est réglé à first ou all, les colonnes et les types de données de la table externe sont automatiquement dérivés des métadonnées du fichier Avro, ORC ou Parquet.

Les noms de colonne correspondront à ceux trouvés dans Avro, ORC ou Parquet. Les types de données sont convertis des types Avro, ORC ou Parquet aux types de données Oracle. Toutes les colonnes sont ajoutées à la table.

La valeur first spécifie d'utiliser les métadonnées du premier fichier Avro, ORC ou Parquet dans file_uri_list pour générer automatiquement les colonnes et leurs types de données. Utilisez first si tous les fichiers ont le même schéma.

La valeur all indique d'utiliser les métadonnées de tous les fichiers Avro, ORC ou Parquet dans file_uri_list pour générer automatiquement les colonnes et leurs types de données. Utilisez all (plus lent) si les fichiers peuvent avoir des schémas différents.

Par défaut : Si column_list est spécifié, la valeur schema, si elle est spécifiée, est ignorée. Si column_list n'est pas spécifié, la valeur par défaut de schema est first.

Note : Pour les fichiers au format Avro, ORC ou Parquet, l'option de format schema n'est pas disponible et le paramètre column_list doit être spécifié pour les tables externes partitionnées à l'aide de la procédure DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE.

schema : first | all

Mappage de types de données Avro et Oracle dans l'ensemble DBMS_CLOUD

Décrit le mappage des types de données Avro aux types de données Oracle.

Note : Les types complexes, tels que les cartes, les tableaux et les structures, sont pris en charge à partir d'Oracle Database 19c. Voir Types complexes Avro, ORC et Parquet de l'ensemble DBMS_CLOUD pour plus d'informations sur l'utilisation des types complexes Avro.

Type Avro Type Oracle
INT NUMÉRO(10)
LONG NUMÉRO(19)
BOÎTE NUMÉRO(1)
TABLEAU DES OCTETS UTF8 RAW(2000)
FLOT BINARY_FLOAT
Base de données BINARY_DOUBLE
DÉCIMAL(p) NUMÉRO(p)
DÉCIMAL(p,s) NUMÉRO(p,s)
DATE DATE
STRING VARCHAR2
TIME_MILLIS VARCHAR2(20 OCTETS)
TIME_MICROS VARCHAR2(20 OCTETS)
TIMESTAMP_MILLIS TIMESTAMP(3)
TIMESTAMP_MICROS TIMESTAMP(6)
ENUM VARCHAR2(n) Où : "n" est la longueur maximale réelle des valeurs possibles d'AVRO ENUM
DURATION RAW(2000)
FIXED RAW(2000)
NULL VARCHAR2(1) OCTET

Voir Types complexes Avro, ORC et Parquet de l'ensemble DBMS_CLOUD pour plus d'informations sur l'utilisation des types complexes Avro.

Mappage de types de données ORC et Oracle dans l'ensemble DBMS_CLOUD

Décrit le mappage des types de données ORC aux types de données Oracle.

Voir Types complexes Avro, ORC et Parquet de l'ensemble DBMS_CLOUD pour plus d'informations sur l'utilisation des types complexes ORC.

Type ORC Type Oracle Informations supplémentaires
tableau Format JSON VARCHAR2(n) Types complexes Avro, ORC et Parquet dans l'ensemble DBMS_CLOUD
bigint (64 bits) NUMÉRO(19)  
binary BLOB  
booléen (1 bit) NUMÉRO(1)  
char CHAR(n)  
date DATE  
double BINARY_DOUBLE  
float BINARY_FLOAT  
int (32 bits) NUMÉRO(10)  
liste Format JSON VARCHAR2(n) Types complexes Avro, ORC et Parquet dans l'ensemble DBMS_CLOUD
map Format JSON VARCHAR2(n) Types complexes Avro, ORC et Parquet dans l'ensemble DBMS_CLOUD
smallint (16 bits) NUMÉRO(5)  
chaîne VARCHAR2(4000)  
structure Format JSON VARCHAR2(n) Types complexes Avro, ORC et Parquet dans l'ensemble DBMS_CLOUD
timestamp TIMESTAMP  
minuscule (8 bits) NUMÉRO(3)  
syndicat Format JSON VARCHAR2(n) Types complexes Avro, ORC et Parquet dans l'ensemble DBMS_CLOUD
varchar VARCHAR2(n)  

Mappage de types de données Parquet et Oracle dans l'ensemble DBMS_CLOUD

Décrit le mappage des types de données Parquet aux types de données Oracle.

Note : Les types complexes, tels que les cartes, les tableaux et les structures, sont pris en charge à partir d'Oracle Database 19c. Voir Types complexes Avro, ORC et Parquet de l'ensemble DBMS_CLOUD pour plus d'informations sur l'utilisation des types complexes Parquet.

Type de parquet Type Oracle
UINT_64 NUMÉRO(20)
INT_64 — NUMÉRO(19)
UINT_32 NUMÉRO(10)
INT_32 — NUMÉRO(10)
UINT_16 NUMÉRO(5)
INT_16 — NUMÉRO(5)
UINT_8 NUMÉRO(3)
INT_8; NUMÉRO(3)
BOÎTE NUMÉRO(1)
TABLEAU DES OCTETS UTF8 VARCHAR2(4000 OCTETS)
FLOT BINARY_FLOAT
Base de données BINARY_DOUBLE
DÉCIMAL(p) NUMÉRO(p)
DÉCIMAL(p,s) NUMÉRO(p,s)
DATE DATE
STRING VARCHAR2(4000)
TIME_MILLIS VARCHAR2(20 OCTETS)
TIME_MILLIS_UTC; VARCHAR2(20 OCTETS)
TIME_MICROS VARCHAR2(20 OCTETS)
TIME_MICROS_UTC; VARCHAR2(20 OCTETS)
TIMESTAMP_MILLIS TIMESTAMP(3)
HORODATAGE_MILLIS_UTC TIMESTAMP(3)
TIMESTAMP_MICROS TIMESTAMP(6)
HORODATAGE_MICROS_UTC TIMESTAMP(6)
HORODATAGE_NANOS TIMESTAMP(9)

Voir Types complexes Avro, ORC et Parquet de l'ensemble DBMS_CLOUD pour plus d'informations sur l'utilisation des types complexes Parquet.

Mappage de types de données Oracle et Parquet dans l'ensemble DBMS_CLOUD

Décrit le mappage des types de données Oracle aux types de données Parquet.

Type Oracle Type de parquet
BINARY_DOUBLE Base de données
BINARY_FLOAT FLOT
DATE DATE
NUMÉRO(p,s) DÉCIMAL(p,s)
NUMÉRO(p) DÉCIMAL(p)
TIMESTAMP(3) TIMESTAMP_MILLIS
TIMESTAMP(3) HORODATAGE_MILLIS_UTC
TIMESTAMP(6) TIMESTAMP_MICROS
TIMESTAMP(6) HORODATAGE_MICROS_UTC
TIMESTAMP(9) HORODATAGE_NANOS
VARCHAR2(4000) STRING

Paramètres de session NLS

Les paramètres de session NLS NLS_DATE_FORMAT, NLS_TIMESTAMP_FORMAT, NLS_TIMESTAMP_TZ_FORMAT et NLS_NUMERIC_CHARACTERS définissent comment la date, l'horodatage, l'horodatage avec le format de fuseau horaire et le séparateur radix pour l'horodatage avec un marqueur décimal doivent être affichés lorsqu'une table avec ces types de colonne est interrogée.

De plus, lorsque vous exportez des données à l'aide de DBMS_CLOUD.EXPORT_DATA et spécifiez la sortie Parquet, la base de données autonome d'intelligence artificielle lit les valeurs de ces paramètres dans la table NLS_SESSION_PARAMETERS. Autonomous AI Database utilise ces valeurs pour convertir les types de données Oracle DATE ou TIMESTAMP en types Parquet.

Les paramètres NLS_SESSION_PARAMETERS prennent en charge un masque de format RR (spécification d'année à deux caractères).

Le masque de format RR pour l'année n'est pas pris en charge pour ces paramètres lorsque vous exportez des données vers Parquet avec DBMS_CLOUD.EXPORT_DATA. Une erreur d'application est générée si vous tentez d'exporter vers parquet et que NLS_SESSION_PARAMETERS est défini pour utiliser le masque de format RR (la valeur par défaut du format RR dépend de la valeur du paramètre NLS_TERRITORY).

Lorsque l'un des paramètres NLS_DATE_FORMAT, NLS_TIMESTAMP_FORMAT ou NLS_TIMESTAMP_TZ_FORMAT utilise le masque de format RR, vous devez remplacer la valeur de format par la valeur prise en charge pour exporter les données vers Parquet avec DBMS_CLOUD.EXPORT_DATA. Par exemple :

ALTER SESSION SET NLS_DATE_FORMAT = "MM/DD/YYYY";
ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH:MI:SS.FF';
ALTER SESSION SET  NLS_TIMESTAMP_TZ_FORMAT='YYYY-MM-DD HH:MI:SS.FF TZH:TZM';

Après avoir modifié la valeur, vous pouvez vérifier la modification en interrogeant la vue NLS_SESSION_PARAMETERS :

SELECT value FROM NLS_SESSION_PARAMETERS
       WHERE parameter IN ('NLS_DATE_FORMAT','NLS_TIMESTAMP_FORMAT','NLS_TIMESTAMP_TZ_FORMAT');

Si NLS_DATE_FORMAT est défini, il s'applique aux colonnes ayant le type de données DATE. Si NLS_TIMESTAMP_FORMAT est défini, il s'applique aux colonnes avec le type de données TIMESTAMP. Si NLS_TIMESTAMP_TZ_FORMAT est défini, il s'applique aux colonnes ayant le type de données TIMESTAMP WITH TIME ZONE.

Pour plus d'informations, voir Paramètres de date et d'heure dans Oracle Database 19c Database Globalization Support Guide ou Oracle Database 26ai Database Globalization Support Guide et Vues du dictionnaire de données NLS dans Oracle Database 19c Database Globalization Support Guide ou Oracle Database 26ai Database Globalization Support Guide.

Types complexes Avro, ORC et Parquet dans l'ensemble DBMS_CLOUD

Décrit le mappage des types de données complexes Avro, ORC et Parquet aux types de données Oracle.

Autonomous AI Database prend en charge les types de données complexes suivants :

Lorsque vous spécifiez un type de fichier source Avro, ORC ou Parquet et que le fichier source inclut des colonnes complexes, les interrogations de base de données d'intelligence artificielle autonome retournent des données JSON pour les colonnes complexes. Cela simplifie le traitement des résultats d'interrogation. Vous pouvez utiliser les puissantes fonctions d'analyse JSON d'Oracle de manière uniforme pour tous les types de fichier et tous les types de données. Le tableau suivant présente le format des types complexes dans Autonomous AI Database :

Note : Les champs complexes sont mappés aux colonnes VARCHAR2 et les limites de taille VARCHAR2 s'appliquent.

Type Parquet Code de taux d'intérêt Avro Oracle
Liste : séquence de valeurs Liste Liste Array VARCHAR2 (format JSON)
Carte : liste d'objets avec une seule clé Mappe Mappe Mappe VARCHAR2 (format JSON)
Union : valeurs de type différent Non disponible Union Union VARCHAR2 (format JSON)
Objet : zéro paire clé-valeur ou plus Struct Struct Enregistrement VARCHAR2 (format JSON)

Si vos fichiers sources ORC, Parquet ou Avro contiennent des types complexes, vous pouvez interroger la sortie JSON pour ces types complexes courants. Par exemple, l'illustration suivante présente un fichier ORC, movie-info.orc, avec un type complexe (le même traitement de type complexe s'applique aux fichiers sources Parquet et Avro).

Considérez le fichier movie-info.orc avec le schéma suivant :

id    int
original_title string
overview       string
poster_path    string
release_date   string
vote_count     int
runtime        int
popularity     double
genres         array<struct<id:int,name:string>

Notez que chaque film est catégorisé par plusieurs genres à l'aide d'un tableau de genres. Le tableau genres est un array de structs et chaque élément comporte un id (int) et un name (string). Le tableau genres est considéré comme un type complexe. Vous pouvez créer une table sur ce fichier ORC à l'aide de DBMS_CLOUD.CREATE_EXTERNAL_TABLE comme suit :

BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
        table_name =>'movie_info',
        credential_name =>'OBJ_STORE_CRED',
        file_uri_list =>'https://objectstorage.us-phoenix-1.oraclecloud.com/n/mytenancy/b/movies/o/movie-info.orc',
        format => '{"type":"orc", "schema": "first"}');
END;
/

Lorsque vous créez la table externe, la base de données génère automatiquement les colonnes en fonction du schéma du fichier ORC (si vous utilisez Avro ou Parquet, il en va de même). Pour cet exemple, DBMS_CLOUD.CREATE_EXTERNAL_TABLE crée une table dans votre base de données comme suit :

CREATE TABLE "ADMIN"."MOVIE_INFO"
    ( "ID"
      NUMBER(10,0),
      "ORIGINAL_TITLE"  VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP",
      "OVERVIEW"        VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP",
      "POSTER_PATH"     VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP",
      "RELEASE_DATE"    VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP",
      "VOTE_COUNT"      NUMBER(10,0),
      "RUNTIME"         NUMBER(10,0),
      "POPULARITY"      BINARY_DOUBLE,
      "GENRES"          VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP"
    )  DEFAULT COLLATION "USING_NLS_COMP"
    ORGANIZATION EXTERNAL
     ( TYPE      ORACLE_BIGDATA
       DEFAULT DIRECTORY "DATA_PUMP_DIR"
       ACCESS PARAMETERS
       ( com.oracle.bigdata.credential.name=OBJ_STORE_CRED
         com.oracle.bigdata.fileformat=ORC
   )
       LOCATION
        (
      'https://objectstorage.us-phoenix-1.oraclecloud.com/n/mytenancy/b/movies/o/movie-info.orc'
           )
     )
   REJECT LIMIT UNLIMITED
   PARALLEL;
 )

Vous pouvez maintenant interroger les données du film :

SELECT original_title, release_date, genres
     FROM movie_info
     WHERE release_date > '2000'
     ORDER BY original_title;

Cela produit la sortie suivante :

original_title              release_date   genres
(500) Days of Summer        2009           [{"id":3,"name":"Drama"},{"id":6,"name":"Comedy"},{"id":17,"name":"Horror"},{"id":19,"name":"Western"},{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
10,000 BC                   2008           [{"id":6,"name":"Comedy"}]
11:14                       2003           [{"id":9,"name":"Thriller"},{"id":14,"name":"Family"}]
127 Hours                   2010           [{"id":6,"name":"Comedy"},{"id":3,"name":"Drama"}]
13 Going on 30              2004           [{"id":6,"name":"Comedy"},{"id":3,"name":"Drama"},{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
1408                        2007           [{"id":45,"name":"Sci-Fi"},{"id":6,"name":"Comedy"},{"id":17,"name":"Horror"},{"id":6,"name":"Comedy"},{"id":18,"name":"War"}]

Notez que le type complexe genres est retourné en tant que tableau JSON.

Pour rendre les données JSON plus utiles, vous pouvez transformer la colonne à l'aide des fonctions JSON d'Oracle. Par exemple, vous pouvez utiliser la notation JSON "." ainsi que les fonctions de transformation plus puissantes telles que JSON_TABLE.

Voir Accès simple à la notation par points aux données JSON dans Oracle Database 19c JSON Developer's Guide ou Oracle Database 26ai JSON Developer's Guide pour plus d'informations sur la notation ".".

Voir Fonction SQL/JSON JSON_TABLE dans Oracle Database 19c JSON Developer's Guide ou Oracle Database 26ai JSON Developer's Guide pour plus d'informations sur JSON_TABLE.

L'exemple suivant montre une interrogation sur la table qui prend chaque valeur du tableau et transforme la valeur en ligne dans l'ensemble de résultats :

SELECT original_title, release_date, m.genre_name, genres
    FROM movie_info mi,
       JSON_TABLE(mi.genres, '$.name[*]'
        COLUMNS (genre_name VARCHAR2(25) PATH
      '$')
                 ) AS m
 WHERE rownum < 10;

JSON_TABLE crée une rangée pour chaque valeur du tableau, pense une jointure externe et la structure est analysée pour extraire le nom du genre. Cela produit la sortie suivante :

original_title                   release_date         genre_name        genres
(500) Days of Summer             2009                 Drama             [{"id":3,"name":"Drama"},{"id":6,"name":"Comedy"},
                                                                        {"id":17,"name":"Horror"},{"id":19,"name":"Western"},
                                                                        {"id":18,"name":"War"},{"id":15,"name":"Romance"}]
(500) Days of Summer             2009                 Comedy            [{"id":3,"name":"Drama"},{"id":6,"name":"Comedy"},
                                                                        {"id":17,"name":"Horror"},{"id":19,"name":"Western"},
                                                                        {"id":18,"name":"War"},{"id":15,"name":"Romance"}]
(500) Days of Summer             2009                 Horror            [{"id":3,"name":"Drama"},{"id":6,"name":"Comedy"},
                                                                        {"id":17,"name":"Horror"},{"id":19,"name":"Western"},
                                                                        {"id":18,"name":"War"},{"id":15,"name":"Romance"}]
(500) Days of Summer             2009                 Western           [{"id":3,"name":"Drama"},{"id":6,"name":"Comedy"},
                                                                        {"id":17,"name":"Horror"},{"id":19,"name":"Western"},
                                                                        {"id":18,"name":"War"},{"id":15,"name":"Romance"}]
(500) Days of Summer             2009                 War               [{"id":3,"name":"Drama"},{"id":6,"name":"Comedy"},
                                                                        {"id":17,"name":"Horror"},{"id":19,"name":"Western"},
                                                                        {"id":18,"name":"War"},{"id":15,"name":"Romance"}]
(500) Days of Summer             2009                 Romance           [{"id":3,"name":"Drama"},{"id":6,"name":"Comedy"},
                                                                        {"id":17,"name":"Horror"},{"id":19,"name":"Western"},
                                                                        {"id":18,"name":"War"},{"id":15,"name":"Romance"}]
10,000 BC                        2008                 Comedy            [{"id":6,"name":"Comedy"}]
11:14                            2003                 Family            [{"id":9,"name":"Thriller"},{"id":14,"name":"Family"}]
11:14                            2003                 Thriller          [{"id":9,"name":"Thriller"},{"id":14,"name":"Family"}]
127 Hours                        2010                 Comedy            [{"id":6,"name":"Comedy"},{"id":3,"name":"Drama"}]
127 Hours                        2010                 Drama             [{"id":6,"name":"Comedy"},{"id":3,"name":"Drama"}]
13 Going on 30                   2004                 Romance           [{"id":6,"name":"Comedy"},{"id":3,"name":"Drama"},
                                                                        {"id":18,"name":"War"},{"id":15,"name":"Romance"}]
13 Going on 30                   2004                 Comedy            [{"id":6,"name":"Comedy"},{"id":3,"name":"Drama"},
                                                                        {"id":18,"name":"War"},{"id":15,"name":"Romance"}]
13 Going on 30                   2004                 War               [{"id":6,"name":"Comedy"},{"id":3,"name":"Drama"},
                                                                        {"id":18,"name":"War"},{"id":15,"name":"Romance"}]
13 Going on 30                   2004                 Drama             [{"id":6,"name":"Comedy"},{"id":3,"name":"Drama"},
                                                                        {"id":18,"name":"War"},{"id":15,"name":"Romance"}]

Mappage de noms de colonne Avro, ORC et Parquet vers Oracle dans l'ensemble DBMS_CLOUD

Décrit les règles de conversion des noms de colonne Avro, ORC et Parquet en noms de colonne Oracle.

Les éléments suivants sont pris en charge pour les noms de colonne Avro, ORC et Parquet, mais peuvent nécessiter l'utilisation de guillemets doubles pour les références SQL Oracle dans les tables externes. Ainsi, pour faciliter l'utilisation et éviter d'avoir à utiliser des guillemets doubles lors de la référence à des noms de colonne, si possible, n'utilisez pas les éléments suivants dans les noms de colonne Avro, ORC et Parquet :

Le tableau suivant présente les différents types de noms de colonne Avro, ORC et Parquet, ainsi que les règles d'utilisation des noms de colonne dans les noms de colonne Oracle dans les tables externes.

Nom Avro, ORC ou Parquet Nom de la TABLE CREATE CATALOGUE Oracle SQL valide Notes
pièce, pièce ou pièce pièce, pièce PARTIE

select part

select Part

select paRt

select PART

Oracle met implicitement en majuscules les noms de colonne sans guillemets.
N° commande "N° commande" N° commande select "Ord No" Des guillemets doubles sont requis lorsqu'il y a des blancs imbriqués, ce qui préserve également la casse des caractères.
__index_key__; "__index_key__" __index_key__; select "__index_key__" Des guillemets doubles sont requis lorsqu'il existe un trait de soulignement de début, ce qui préserve également la casse des caractères.
6 Voie "6Way" 6 Voie select "6Way" Des guillemets doubles sont requis lorsqu'il y a un chiffre de début, ce qui préserve également la casse des caractères.
créer, créer ou CRÉER, etc. (toute variation de cas) PARTITION, PARTITION, PARTITION, etc. (pour un mot réservé Oracle) "CRÉER" "PARTITION" CRÉER UNE PARTITION

select "CREATE"

select "PARTITION"

Des guillemets doubles sont requis autour des mots réservés Oracle SQL. Elles doivent être mises en majuscules, mais doivent toujours faire l'objet de guillemets doubles lorsqu'elles sont utilisées n'importe où dans SQL.
ROWID, ROWID, ROWID, etc. (pour ROWID, voir notes) ID rangée  

select "rowid"

select "Rowid"

select "ROWid"

select "rowid"

Pour ROWID, toute variation mixte ou minuscule de ROWID préserve la casse et doit toujours faire l'objet de guillemets doubles et utiliser les variations initiales de cas. En raison du conflit inhérent avec le ROWID Oracle pour la table, si vous spécifiez un ROWID en majuscules, il est automatiquement stocké sous forme de "ROWID" en minuscules et doit toujours faire l'objet de guillemets lorsqu'il est référencé.

Notes