【问题标题】:declaration of variable in teradatateradata 中的变量声明
【发布时间】:2016-09-27 21:41:14
【问题描述】:

在 teradata 的 sql 方言中是否有相当于声明一个类似于此 Sql Server (TSQL) 代码的变量?

DECLARE @Somedate Date = GETUTCDATE();

SELECT TOP 10 * FROM SOMETABLE WHERE SOMEDATE = @Somedate;

【问题讨论】:

  • 你是如何执行你的查询的? SQL 助手,BTEQ?
  • 您不能在 Teradata 中使用存储过程(或宏)之外的变量。
  • 嗯,这有点取决于 OP 通过变量表示什么,或者实际上是在尝试做什么。您可以使用 ?在 SQL 助手中,对于 BTEQ,您可以使用 shell 脚本插入变量。

标签: teradata


【解决方案1】:

是和不是。您不能在直接从代码编辑器运行的典型 SQL 语句中声明变量。您可以(作为一个示例)在存储过程中声明变量。在您的代码编辑器窗口中,您更有可能创建一个易失性表并使用它来存储“变量”的值。

【讨论】:

    【解决方案2】:

    是否可以在 Teradata 上仅使用以下语法? Current_Date 部分可以替换为任何标量查询。这将适用于 Teradata SQL 助手/BTEQ 工具

    SELECT TOP 10 * FROM SOMETABLE WHERE SOMEDATE = Current_Date;
    SELECT TOP 10 * FROM SOMETABLE WHERE SOMEDATE = (SELECT MAX(SameDate) FROM SomeOtherTable);
    

    将日期存储为 Teradata 存储过程中的某个变量来实现此目的的一种方法是:

    DECLARE v_SQL_Text VARCHAR(32000);
    DECLARE v_Somedate Date;
    
    SELECT Current_Date INTO :v_Somedate;
    
    SET v_SQL_Text = 'SELECT TOP 10 * FROM SOMETABLE WHERE SOMEDATE = ' || v_Somedate || ';'
    
    CALL DBC.SysExecSQL(v_SQL_Text);
    

    【讨论】:

    • 你能解释一下它是怎么工作的吗?你用什么工具查询?
    • 这不是供股。把它放在一个存储的过程中,它就可以工作(即使在相同的帐户/权限下运行)。它只是普通 SQL 助手脚本中的无效语法。
    • 好的,我添加了一些文字来说明每个提到的解决方案的位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 2019-03-08
    • 2018-02-03
    相关资源
    最近更新 更多