Is there an SQL construct called COLUMNS() to return the number and type of columns in a table, or should schema introspection be done via INFORMATION_SCHEMA or database-specific catalog views?

Difficulty: Easy

Correct Answer: Does not apply — there is no COLUMNS(); use INFORMATION_SCHEMA or catalog views

Explanation:

Introduction / Context:Developers often need to inspect table metadata (column names, data types). SQL itself does not define a generic COLUMNS() function. This question clarifies the standard approach to schema introspection.

Given Data / Assumptions:

  • We are working with relational databases (e.g., MySQL, PostgreSQL, SQL Server, Oracle).
  • We want a portable way to discover column metadata.
  • We must distinguish standard vs. vendor-specific methods.

Concept / Approach:ANSI SQL defines INFORMATION_SCHEMA views (e.g., INFORMATION_SCHEMA.COLUMNS) that expose metadata. Vendors also provide catalog views (e.g., sys.columns in SQL Server, ALL_TAB_COLUMNS in Oracle). There is no COLUMNS() aggregate or function in standard SQL to list or count columns directly.

Step-by-Step Solution:Query INFORMATION_SCHEMA.COLUMNS filtered by table_schema and table_name.COUNT() over that set yields the number of columns.Select data_type and ordinal_position for types and ordering.Use vendor catalog views if additional details are needed (collation, identity, computed).Wrap in a view or stored procedure for reuse.

Verification / Alternative check:Run queries against multiple DBMSs; INFORMATION_SCHEMA returns consistent metadata where implemented. No engine will accept COLUMNS() as a valid construct.

Why Other Options Are Wrong:Claims about ANSI or Oracle support for COLUMNS() are incorrect. The functionality belongs to metadata views, not an aggregate function.

Common Pitfalls:Relying on nonportable DESCRIBE commands; forgetting to filter by schema; conflating column count with column statistics.

Final Answer:Does not apply — there is no COLUMNS(); use INFORMATION_SCHEMA or catalog views

Discussion & Comments

No comments yet. Be the first to comment!
Join Discussion