Oracle
 sql >> Base de données >  >> RDS >> Oracle

Fonction CHARTOROWID() dans Oracle

Dans Oracle Database, le CHARTOROWID() la fonction convertit une valeur de chaîne en ROWID type de données.

Syntaxe

La syntaxe ressemble à ceci :

CHARTOROWID(char)

char est l'un des CHAR , VARCHAR2 , NCHAR , ou NVARCHAR2 types de données.

Exemple

Voici un exemple pour illustrer :

SELECT 
    CHARTOROWID('AAATiDAAMAAALKzABa')
FROM DUAL;

Résultat :

AAATiDAAMAAALKzABa

Bien qu'il s'agisse d'un exemple simple et rapide, il ne nous montre pas que le résultat final est de type ROWID .

Cependant, nous pouvons le découvrir comme ceci :

SELECT 
    DUMP('AAATiDAAMAAALKzABa', 17, 1, 5) AS "r1",
    DUMP(CHARTOROWID('AAATiDAAMAAALKzABa'), 17, 1, 5) AS "r2"
FROM DUAL;

Résultat :

                         r1                              r2 
___________________________ _______________________________ 
Typ=96 Len=18: A,A,A,T,i    Typ=69 Len=10: ^@,^A,8,83,^C   

Ici, j'ai utilisé le DUMP() fonction pour obtenir la représentation interne des cinq premiers caractères.

Mais surtout, cette fonction renvoie également l'ID de type. Le premier est 96 , qui est l'ID de type pour CHAR et NCHAR , et le second est 69 , qui est l'ID de type pour ROWID .

Cela démontre donc que le CHARTOROWID() la fonction convertit en fait une chaîne en un ROWID .

Un exemple de base de données

Voici un exemple qui renvoie une ligne dans une table de base de données, basée sur un ROWID donné :

SELECT 
    ROWID,
    FIRST_NAME,
    LAST_NAME
FROM EMPLOYEES
WHERE ROWID = CHARTOROWID('AAATiDAAMAAALKzABa');

Résultat :

                ROWID    FIRST_NAME    LAST_NAME 
_____________________ _____________ ____________ 
AAATiDAAMAAALKzABa    Timothy       Gates       

ROWID non valide

Passer un ROWID invalide génère une erreur :

SELECT CHARTOROWID('oops')
FROM DUAL;

Résultat :

Error report -
ORA-01410: invalid ROWID

Argument nul

Si l'argument est null , le résultat est null :

SET NULL 'null';
SELECT CHARTOROWID(null)
FROM DUAL;

Résultat :

null

Par défaut, SQLcl et SQL*Plus renvoient un espace vide chaque fois qu'une valeur nulle se produit à la suite d'un SELECT SQL déclaration.

Cependant, vous pouvez utiliser SET NULL pour spécifier une autre chaîne à renvoyer. Ici, j'ai précisé que la chaîne null doit être retourné.

Nombre d'arguments non valides

Appelant CHARTOROWID() sans aucun argument génère une erreur :

SELECT CHARTOROWID()
FROM DUAL;

Résultat :

SQL Error: ORA-00909: invalid number of arguments
00909. 00000 -  "invalid number of arguments"

Et passer trop d'arguments entraîne également une erreur :

SELECT CHARTOROWID('AAATiDAAMAAALKzABa', 'AAATiDAAMAAALKzABa')
FROM DUAL;

Résultat :

SQL Error: ORA-00909: invalid number of arguments
00909. 00000 -  "invalid number of arguments"