CONNECT BY is out then. :-)
CONNECT BY is out if you have to support Transact-SQL.
You could use nested set trees, which for small hierarchies are probably fast enough on inserts, or simple parentID columns and some code, which can be considerably slower for reading the entire tree. A third method, encoding the path to the node with the node itself, limits the depth you can represent (not an issue if you have shallow trees) and requires string compares for lookups.
With a nested set tree, simple updates will be just as fast as any keyed update would be. Only inserts, deletes, and rare operations like moves are slower, and then only when you are manipulating the left side of the tree. I use a hybrid here, as finding the immediate children/ancestor only of a node can be problematic with a pure nested set.
If you want some example code, I have both Transact-SQL and plpgsql (Postgres, similar to PL/SQL).
Regards,
-scott anderson
"Welcome to Rivendell, Mr. Anderson..."