代码之家  ›  专栏  ›  技术社区  ›  The Impaler

是否可以在不指定模式的情况下使用DB2变量?

  •  0
  • The Impaler  · 技术社区  · 6 年前

    使用到DB2的JDBC连接,我使用URL指定了默认模式。 jdbc:db2://192.168.56.208:50000/db001:currentSchema=TZTC; . 然后,我在默认模式中创建了一个DB2变量,如下所示:

    create variable my_var1 smallint default 1;
    

    但是,当我试图设置或显示它时,我不得不指定它的模式名。当我尝试时失败:

    set my_var1 = 123;
    Error: DB2 SQL Error: SQLCODE=-206, SQLSTATE=42703, SQLERRMC=MY_VAR1, DRIVER=3.53.95
    
    select my_var1 from sysibm.sysdummy1;
    Error: DB2 SQL Error: SQLCODE=-206, SQLSTATE=42703, SQLERRMC=MY_VAR1, DRIVER=3.53.95
    

    但是,如果我指定了模式名,那么一切都可以正常工作:

    set tztc.my_var1 = 123; -- works
    select tztc.my_var1 from sysibm.sysdummy1; -- returns 123
    

    是否可以在不指定模式的情况下使用DB2变量?我更愿意将它的模式保持在项目中所有其他的SQL代码中。

    2 回复  |  直到 6 年前
        1
  •  1
  •   data_henrik    6 年前

    Variables always are created in a schema ,或者 explicitly or implicitly . 如果您在同一个模式中,那么应该能够引用没有模式名称的变量。因此,应该可以按照您的要求以无模式的方式实现它。

    这个 docs have the rules 变量名的解析方式。

    请注意,模块和常规SQL(语句)上下文中定义的变量之间存在差异。

        2
  •  -1
  •   danny117    6 年前

    限定变量在iSeries DB2上工作。

    create variable mylib.my_var1 smallint default 1;
    set mylib.my_var1 = 12;
    

    这也适用于iSeries DB2。

    create variable danny117 smallint default 1;
    set danny117 = 12;
    drop variable danny117;