class OCI8
def describe_table(table_name, table_only = false)
-
(OCI8::Metadata::Table or OCI8::Metadata::View)-
Parameters:
-
table_only(Boolean) -- (default: false) -
table_name(String) --
def describe_table(table_name, table_only = false) if table_only # check my own tables only. __describe(table_name, OCI8::Metadata::Table, false) else # check tables, views, synonyms and public synonyms. # follow synonyms up to 20 times to prevent infinite loop # caused by recursive synonyms. recursive_level = 20 recursive_level.times do metadata = __describe(table_name, OCI8::Metadata::Unknown, true) case metadata when OCI8::Metadata::Table, OCI8::Metadata::View return metadata when OCI8::Metadata::Synonym table_name = metadata.translated_name if metadata.obj_link and metadata.link.nil? # table_name is a synonym in a remote database for an object in the # remote database itself. table_name = "#{table_name}@#{metadata.obj_link}" end else raise OCIError.new(4043, table_name) # ORA-04043: object %s does not exist end end raise OCIError.new(36, recursive_level) # ORA-00036: maximum number of recursive SQL levels (%s) exceeded end end