【问题标题】:How to identify a query that returns a result set in Teradata?如何识别在 Teradata 中返回结果集的查询?
【发布时间】:2016-01-02 15:45:55
【问题描述】:

我正在编写一些将查询解析为两个桶的简单程序:

1) 没有结果集的那些(如 INSERT、UPDATE、CREATE)

2) 和那些这样做的人(比如 SELECT)

据我了解,只要查询以 SELWITH 子字符串开头,它总是有一个结果集。它是否正确 ?我确定SEL,但不太确定WITH。查询是否可能以 WITH 开头并且没有结果集?

【问题讨论】:

  • 我相信您关于 WITH 仅是 SELECT 的假设是正确的。您不能将WithINSERTUPDATEDELETECREATE 等一起使用...事实上,在CTE 之后唯一允许的关键字是SELECT 和一些临时关键字,它们会最终只会导致SELECT。但是,当您点击“USING”或“LOCKING”等关键字时,这种解析可能会变得更加困难。
  • 非常感谢我完全忘记了 LOCKING 。

标签: sql teradata


【解决方案1】:

在 Java 中(例如)

Connection conn = ... // connect here
if (conn.createStatement().execute( sql )) {
  // it's a select statement
}

您的 SQL 也可以以 cmets 开头并且可以提交。另一个例子是匿名块:

BT;
  select user; 
ET;

【讨论】:

    【解决方案2】:

    您忽略了在此拆分中“隐藏”逻辑的 SQL。例如,宏可以包含 SELECT 和/或 DML。如果您有 EXEC myMacro,您必须获取宏的 DDL 并解析这个。

    我会尝试请求 SQL 解释的方法。在这种情况下,RDBMS 接管解析,您只需扫描解释是否(最后)有东西发送到客户端(他们将有一个结果集)或插入/合并到表中。

    【讨论】:

      猜你喜欢
      • 2018-09-03
      • 1970-01-01
      • 2021-09-04
      • 2017-12-19
      • 2012-03-30
      • 2016-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多