【问题标题】:How to define and use global variable in SQL [duplicate]如何在 SQL 中定义和使用全局变量 [重复]
【发布时间】:2025-12-07 03:40:01
【问题描述】:

我是一名测试人员,我必须运行大量选择查询来过滤掉我正在测试的信息。

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

示例代码:

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');

【问题讨论】:

  • 您可以使用 t-sql 变量并预先设置它。如果您发布您正在使用的代码而不是图片,我将向您展示如何使用它
  • 您使用的是哪个 dbms。 (答案可能是特定于产品的。)
  • 我正在使用 SQL 开发人员。这里是代码: 选择 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';选择 m.* from avtt7m0 m, avtt7l0 l 其中 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 oracle oracle-sqldeveloper dynamic-queries


【解决方案1】:

您可以声明变量并为其分配customer 值。

DECLARE @Customer BIGINT='52371762090004'

SELECT * FROM AKTTD90 WHERE Cust_id=@Customer

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

【讨论】:

  • 它不工作。我使用 SQL developer 4.1 可以确定原因吗?我不太了解 SQL 查询。因此,我可能不会提供所有信息来帮助我。但如果可以的话,我会尽量回答。
  • @VItas 我已经更新了答案。做检查。
  • 它给出了一个错误。你知道有什么问题吗?从命令中的第 1 行开始出错:DECLARE @Customer BIGINT='52371762090004' SELECT * FROM KNDT7L0 WHERE cust_id =@Customer 错误报告:ORA-06550:第 1 行,第 9 列:PLS-00103:预期时遇到符号“@”以下之一: begin function pragma procedure subtype type current cursor delete 在 06550 之前存在。 00000 - “line %s, column %s:\n%s” *原因:通常是 PL/SQL 编译错误。 *行动:
  • 这是 T-SQL 语法而不是 oracle 语法
【解决方案2】:

这针对 SQL Server - 您的问题没有特定的 RDMS。你可以Declare一个变量(必须以@开头然后Set然后使用它(在大多数情况下):

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

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

【讨论】:

  • SQL developer 4.1 似乎不喜欢这种语法。抱歉,如果我没有提供所有信息。只是因为我是 SQL 新手,所以我不知道要提什么重要的。
  • 为 mysql/sql 开发者编辑。现在应该可以工作了(mysql不需要声明部分)。
【解决方案3】:

执行此操作的一个选项是使用 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;

【讨论】:

    最近更新 更多