如何在SQL中定义和使用全局变量

如何在SQL中定义和使用全局变量,sql,oracle,oracle-sqldeveloper,dynamic-queries,Sql,Oracle,Oracle Sqldeveloper,Dynamic Queries,我是一名测试人员,我必须运行大量的select查询来筛选出我正在测试的信息 有没有办法生成全局变量并使用它而不是粘贴相同的值 示例代码: Select l.prod_package,m.* from avtt7m0 m, avtt7l0 l where l.cust_id='52317162090004' and l.ar_id=m.ar_id and m.lc_st_code='ACT'; Select m.* from avtt7m0 m, avtt7l0 l where l.cu

我是一名测试人员,我必须运行大量的select查询来筛选出我正在测试的信息

有没有办法生成全局变量并使用它而不是粘贴相同的值

示例代码:

Select l.prod_package,m.* from avtt7m0 m, avtt7l0 l 
where l.cust_id='52317162090004' 
and l.ar_id=m.ar_id and m.lc_st_code='ACT'; 

Select m.* from avtt7m0 m, avtt7l0 l 
where l.cust_id='52317162090004' 
and l.ar_id=m.ar_id and m.lc_st_code='ACT'; 

Select * From AKTTD90 
where cust_id in ('52317162090004'); 

Select * From Kndt7m0 
where cust_id in ('52317162090004');

您可以声明变量并为其指定客户值


更新:尝试执行上述查询。

这是针对SQL Server的-您的问题没有特定的RDM。您可以声明一个必须以@开头的变量,然后设置它,然后在大多数情况下使用它:

SET @CustomerID = 12345
SELECT * FROM dbo.Customers WHERE CustomerID = @CustomerID

请注意,这不能用于某些事情,例如表名的变量。还请注意,这些变量实际上不是全局变量,因为它们在GO语句中无法生存。

实现这一点的一个选项是使用PL/SQL包变量:

create or replace package steptest as
  procedure set(a number);
  function get return number;
end;
/

create or replace package body steptest as
  x number;
  procedure set(a number) is
  begin
    x:=a;
  end;
  function get return number is
  begin
    return x;
  end;
begin
  x:=0;
end;    
/
然后你可以:

exec steptest.set(1234);

select steptest.get from dual;

您可以使用t-sql变量并预先设置它。如果你发布你正在使用的代码而不是图片,我将向你展示如何使用它你正在使用的dbms。答案可能是特定于产品的。我使用的是SQL developer。代码如下:从avtt7m0 m、avtt7l0 l中选择l.prod_包,m.*,其中l.cust_id='5231716209004'和l.ar_id=m.ar_id和m.lc_st_code='ACT';从avtt7m0 m、avtt7l0 l中选择m.*,其中l.cust_id='5231716209004'和l.ar_id=m.ar_id和m.lc_st_代码='ACT';从“5231716209004”中客户id所在的AKTTD90中选择*;从“5231716209004”中客户id所在的Kndt7m0中选择*;我把它贴在问题里怎么样。这并不难,看看这个:它不起作用。我使用的是SQL developer 4.1,它能打赌原因吗?我对SQL查询了解不多。所以我可能不会给你所有的信息来帮助我。但如果可以,我会尝试回答。@VItas我已经更新了答案。一定要检查。它会给出一个错误。你知道会出什么问题吗?从命令中的第1行开始时出错:DECLARE@Customer BIGINT='52371762090004'从KNDT7L0中选择*,其中cust_id=@Customer Error report:ORA-06550:第1行第9列:PLS-00103:在预期以下情况之一时遇到符号@:begin function pragma procedure subtype当前光标存在06550之前。00000-行%s,列%s:\n%s*原因:通常是PL/SQL编译错误*操作:这是T-SQL语法,而不是oracle语法。SQL开发人员4.1似乎不喜欢这种语法。对不起,如果我没有提供所有的信息。这只是因为我是SQL新手,所以我不知道什么是重要的。现在应该可以了,mysql不需要声明部分。
exec steptest.set(1234);

select steptest.get from dual;