Sql 将值保存到oracle db中的变量中

Sql 将值保存到oracle db中的变量中,sql,oracle,variables,Sql,Oracle,Variables,我有一个查询,我必须多次使用它的结果。因此,我不想多次运行查询,而是希望将查询值保存到变量中一次,并多次使用它来加快查询速度 例如: Declare VAr=select M_DATE from TBT如果要存储查询结果,则需要使用select。。。进入 var v_storedate VARCHAR2(19); exec select m_date into :v_storedate from tbt; print v_storedate; 对于匿名SQL块 begin select

我有一个查询,我必须多次使用它的结果。因此,我不想多次运行查询,而是希望将查询值保存到变量中一次,并多次使用它来加快查询速度

例如:


Declare VAr=select M_DATE from TBT

如果要存储查询结果,则需要使用select。。。进入

var v_storedate VARCHAR2(19);
exec select m_date into :v_storedate from tbt;
print v_storedate;
对于匿名SQL块

begin
    select m_date
    into :v_storedate
    from tbt;
end;
/

如果要存储查询结果,则需要使用select。。。进入

var v_storedate VARCHAR2(19);
exec select m_date into :v_storedate from tbt;
print v_storedate;
对于匿名SQL块

begin
    select m_date
    into :v_storedate
    from tbt;
end;
/

如果要在交互式客户端中执行此操作,答案取决于客户端。对于SQLPlus,您可以执行以下操作:

VARIABLE my_date VARCHAR2(10);
BEGIN
  SELECT to_char(sysdate, 'YYYY-MM-DD' ) INTO :my_date FROM dual;
END;
/
PRINT my_date;

SELECT * FROM my_table WHERE date_column = TO_DATE( :my_date, 'YYYY-MM-DD' );
请注意,SQLPlus不支持其变量的
DATE
类型,因此需要在存储时转换为字符串,然后在使用值时返回到日期。我建议始终使用显式转换和格式字符串,以避免在默认格式不是预期格式时出现意外结果

在PL/SQL块或过程中,它会稍微简单一些:

DECLARE
  l_mydate  DATE;
BEGIN
  SELECT sysdate INTO l_mydate FROM dual;

  SELECT whatever INTO l_whatever FROM my_table
    WHERE date_column = l_mydate;

  <etc...>
END;
/
声明
l_mydate日期;
开始
从dual中选择sysdate进入l_mydate;
从my_表中选择l_which
其中date_column=l_mydate;
结束;
/

如果要在交互式客户端中执行此操作,答案取决于客户端。对于SQLPlus,您可以执行以下操作:

VARIABLE my_date VARCHAR2(10);
BEGIN
  SELECT to_char(sysdate, 'YYYY-MM-DD' ) INTO :my_date FROM dual;
END;
/
PRINT my_date;

SELECT * FROM my_table WHERE date_column = TO_DATE( :my_date, 'YYYY-MM-DD' );
请注意,SQLPlus不支持其变量的
DATE
类型,因此需要在存储时转换为字符串,然后在使用值时返回到日期。我建议始终使用显式转换和格式字符串,以避免在默认格式不是预期格式时出现意外结果

在PL/SQL块或过程中,它会稍微简单一些:

DECLARE
  l_mydate  DATE;
BEGIN
  SELECT sysdate INTO l_mydate FROM dual;

  SELECT whatever INTO l_whatever FROM my_table
    WHERE date_column = l_mydate;

  <etc...>
END;
/
声明
l_mydate日期;
开始
从dual中选择sysdate进入l_mydate;
从my_表中选择l_which
其中date_column=l_mydate;
结束;
/