From various posts, I have summarized about using number type instead of char/varchar for PK:
If you choose char/varchar type for PK and your values are short (just some alpha numberic codes) then it doesn't matter what type will you use. As long as the size (in bytes) of string value does not exceed the size of NUMBER type then performance should be the same. However, for larger tables with a wider variation among the key, this can slower the performance, for example, using e-mail address/user name from a user table, for example. If the table consists of a few million users and some of those users have long names or e-mail addresses then index will definitely be larger than just some numbers, so both the insert and search will be slower when compared to numbers. Any time you need to join this table using that key it becomes much more expensive. Also, some implementations might use hash of the actual value for indexing purposes, but even so, and even if it's a relatively short hash (say, 10 byte), it's still more work to compare two 10 byte hashes than two 4 byte integers.