In Oracle Database, the CHARTOROWID() function converts a string value to ROWID data type.
Syntax
The syntax goes like this:
CHARTOROWID(char)
Where char is one of CHAR, VARCHAR2, NCHAR, or NVARCHAR2 data types.
Example
Here’s an example to demonstrate:
SELECT
CHARTOROWID('AAATiDAAMAAALKzABa')
FROM DUAL;
Result:
AAATiDAAMAAALKzABa
Although this is a quick and easy example, it doesn’t show us that the end result is of type ROWID.
However, we can find out like this:
SELECT
DUMP('AAATiDAAMAAALKzABa', 17, 1, 5) AS "r1",
DUMP(CHARTOROWID('AAATiDAAMAAALKzABa'), 17, 1, 5) AS "r2"
FROM DUAL;
Result:
r1 r2 ___________________________ _______________________________ Typ=96 Len=18: A,A,A,T,i Typ=69 Len=10: ^@,^A,8,83,^C
Here, I used the DUMP() function to get the internal representation of the first five characters.
But importantly, this function also returns the type ID. The first one is 96, which is the type ID for CHAR and NCHAR, and the second one is 69, which is the type ID for ROWID.
So this demonstrates that the CHARTOROWID() function does in fact convert a string to a ROWID.
A Database Example
Here’s an example that returns a row in a database table, based on a given ROWID:
SELECT
ROWID,
FIRST_NAME,
LAST_NAME
FROM EMPLOYEES
WHERE ROWID = CHARTOROWID('AAATiDAAMAAALKzABa');
Result:
ROWID FIRST_NAME LAST_NAME _____________________ _____________ ____________ AAATiDAAMAAALKzABa Timothy Gates
Invalid ROWID
Passing an invalid ROWID results in an error:
SELECT CHARTOROWID('oops')
FROM DUAL;
Result:
Error report - ORA-01410: invalid ROWID
Null Argument
If the argument is null, the result is null:
SET NULL 'null';
SELECT CHARTOROWID(null)
FROM DUAL;
Result:
null
By default, SQLcl and SQL*Plus return a blank space whenever a null value occurs as a result of a SQL SELECT statement.
However, you can use SET NULL to specify a different string to be returned. Here I specified that the string null should be returned.
Invalid Argument Count
Calling CHARTOROWID() without any arguments results in an error:
SELECT CHARTOROWID()
FROM DUAL;
Result:
SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments"
And passing too many arguments also results in an error:
SELECT CHARTOROWID('AAATiDAAMAAALKzABa', 'AAATiDAAMAAALKzABa')
FROM DUAL;
Result:
SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments"