【问题标题】:Toad SQL - VariablesToad SQL - 变量
【发布时间】:2017-07-21 18:35:30
【问题描述】:

我最近开始在 TOAD DB2 中工作,我正在尝试设计一些模板,在这些模板中我对多个查询使用特定术语。

SELECT * FROM TABLE1 WHERE PERSON = 'X';
SELECT * FROM TABLE2 WHERE PERSON = 'X';
SELECT * FROM TABLE3 WHERE PERSON = 'X';

等等……

我希望找到一种设置单个变量的方法,以便我可以编写更像这样的代码:

SET PERS_CODE = 'X'
SELECT * FROM TABLE1 WHERE PERSON = :PERS_CODE;
SELECT * FROM TABLE2 WHERE PERSON = :PERS_CODE;
SELECT * FROM TABLE3 WHERE PERSON = :PERS_CODE;

等等……

困难在于我很少将所有查询作为批处理运行。我运行一个查询来研究如何最好地编写代码来进行 BA 修改;研究结果,并标记需要更改的术语和唯一标识记录的术语。所以我临时运行它们,我不想将它们作为批处理或单个程序运行。

相反,我正在寻找一种定义变量的方法,这样当我运行任何单个查询时,它会发现变量是如何定义的,而无需将 SET 语句放入每一行,而无需将所有查询作为批处理运行(或单个过程)或使用项目管理器绑定变量表。


我的研究

我在“项目管理器”中遇到了变量定义表,但是这是有问题的,因为我需要记住在另一个屏幕中为每个工作项更改变量。我想在单个 EDITOR 窗口中定义变量,因此,我可以在使用相同变量术语(但值不同)的 EDTOR 窗口之间切换,而无需记住重置值。

我还遇到过“--TOAD:”语法,它有助于在 EDITOR 窗口中定义变量。但是,这需要包含在程序中。因此,如果我需要为 TABLE2 而不是 TABLE1 运行查询,我将无法使用该变量,因为定义将在 TABLE1 查询代码之上。

--TOAD: SET PERS_CODE = 'X'
SELECT * FROM TABLE1 WHERE PERSON = :PERS_CODE;
SELECT * FROM TABLE2 WHERE PERSON = :PERS_CODE;

这不允许我在不运行 TABLE1 查询或每次修改代码的情况下使用 TABLE2 的变量定义。

【问题讨论】:

    标签: db2 global-variables toad


    【解决方案1】:

    您可能会发现替换变量在这里更合适。

    SELECT * FROM TABLE1 WHERE PERSON = &&PERS_CODE;
    SELECT * FROM TABLE2 WHERE PERSON = &&PERS_CODE;
    

    当您执行其中一个语句时,系统会提示您输入 PERS_CODE 的值。当您将多个语句作为脚本运行时,所有语句都将重用相同的值。可以使用单 & 和双 & 定义替换变量。当使用单个 & 符号时,系统会提示您输入脚本中的每个变量,即使它们具有相同的名称。双 & 号提示一次,并且每隔一次出现重用该值。 Toad 的编辑器会记住上次使用的值,因此您可以以特别的方式继续运行查询,并且只有在您想要测试不同的值时才需要重置该值。

    如果 PERS_CODE 是字符串,则在查询中使用引号。

    SELECT * FROM TABLE1 WHERE PERSON = '&&PERS_CODE';
    

    编辑:出于性能原因,绑定变量更好(:VAR_NAME),但根据您的需要,我认为替换变量会让您更轻松。

    【讨论】:

    • 抱歉,这似乎不起作用。收到以下错误信息; SQL0104 - 令牌 & 无效。
    • 我的假设是您使用的是 Toad for Oracle,但看起来您使用的是 DB2。
    猜你喜欢
    • 2021-04-26
    • 2010-12-29
    • 2014-07-12
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多