【问题标题】:How to store query result in a variable in sql如何将查询结果存储在sql中的变量中
【发布时间】:2014-04-24 06:17:37
【问题描述】:

我正在使用以下查询:

DECLARE 
result varchar2(100);

BEGIN
select (systimestamp - (select date_time from test where id=2945134)) into result from dual;

SELECT SUBSTR(result, 3,1) Final_result
FROM DUAL;

END; 

它显示如下错误:

PLS-00428:此 SELECT 语句中需要一个 INTO 子句
06550. 00000 - “第 %s 行,第 %s 列:\n%s”
原因:通常是 PL/SQL 编译错误。

我需要将第一个查询的结果值存储到结果变量中,然后使用该结果变量将 substring (3,1) 显示为 Final_result。

【问题讨论】:

  • 您到底想达到什么目的? (隐式)将interval 值转换为字符串似乎是一件非常奇怪的事情。

标签: sql oracle substring store


【解决方案1】:

不要从同一个表中选择 2 个,只需 1 个就足够了。 同样作为一种做法,请始终尝试使用对象的完全限定名称

为什么需要“DUAL”表

DECLARE 
@final_result varchar2(100);

BEGIN
select @final_result= SUBSTR((systimestamp - (select date_time from test where id=2945134)),3,1);

END; 

【讨论】:

  • 这对 Oracle 无效
【解决方案2】:
DECLARE 
  result varchar2(100);
BEGIN

  select substr((systimestamp - (select date_time from test where id=2945134)), 3,1)
    into result
  from dual;

  dbms_output.put_line(result);
END;
/

但这是你正在做的一件非常可疑的事情。您依赖于隐式数据类型转换 (interval --> varchar),如果您的 NLS 设置发生更改,它将无法正常工作。

您最好使用to_char() 将生成的interval 格式化为适当的格式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    相关资源
    最近更新 更多