2014-11-04 35 views
1

是否有任何关系数据库可以在运行之前输出查询的返回类型?作为一个例子,像这样的查询GIVE_TYPES SELECT name, age FROM person会给出类似于VARCHAR(255), INTEGER的结果而不实际执行查询。如果这不可能,为什么会这样呢?Typecheck SQL查询

编辑 第一条评论让我意识到我需要提供一个稍微复杂的用例。试想一下,如果查询是这样的:

SELECT parent_name, COUNT(name) FROM person GROUP BY parent_name; 

要选择所有父母的名字和他们的孩子的数量。我希望像VARCHAR(255), INTEGER这样的结果,但列检查不会让我知道COUNT的返回类型。

+0

您可以调用“SHOW COLUMNS FROM person”来显示人员表格中所有列的类型。你可以为任何表做这个;我不确定这仅仅是一个查询是否可能。 – jzila 2014-11-04 19:32:21

+0

在SQL Server上,您可以查询信息模式视图以获取表中列的数据类型。 – 2014-11-04 19:38:33

+0

您正在使用哪些DBMS? Postgres的?甲骨文?你使用哪种编程语言? – 2014-11-04 21:30:08

回答

0

如果是在持续和esqueleto上运行,那么我不认为你将不得不简单地访问这类信息。特别是,我假设任何无法识别的PostgreSQL类型只是被映射到一个Haskell字符串或文本。

关于你能做的最好的是:

  1. CREATE TABLE TEMP T1作为LIMIT 0
  2. SELECT * FROM information_schema.columns在表格= 'T1' AND SCHEMA_NAME = ...
  3. DROP表t1;

您需要标识表t1的临时模式名称(格式为pg_temp_xxx)。

这(加上也许是对信息模式的类型细节的一些后续查询)应该给你详细的结果集的所有列。