如何在SQL中定义和使用全局变量
我是一名测试人员,我必须运行大量的select查询来筛选出我正在测试的信息 有没有办法生成全局变量并使用它而不是粘贴相同的值 示例代码:如何在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 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;