【发布时间】:2020-12-20 14:11:59
【问题描述】:
在 Oracle SQL 语句中,我需要从 Select 语句中分配变量值。我是按照行文档做的,但是变量值是空的。
在 SQL Server 中,我需要执行以下操作。
DECLARE @variable INT;
SELECT @variable= mycolumn from myTable;
在 Oracle 中,这里是我遇到问题的输出和查询。我正在使用 Toad 客户端。 我的目标是使用变量值作为查询的一部分。
这是一个简单的预期用途示例。
SELECT * FROM mytable WHERE DateField >= :varCurrMoDateBeg
DECLARE
varCurrMoDateBeg DATE;
varCurrMoDateEnd DATE;
BEGIN
SELECT MONTH_BEG_DATE INTO varCurrMoDateBeg FROM
(
SELECT
CALENDAR.MONTH_BEG_DATE MONTH_BEG_DATE
FROM
CALENDAR
WHERE
CALENDAR.CAL_TYPE='M'
AND (sysdate) BETWEEN CALENDAR.MONTH_BEG_DATE AND CALENDAR.MONTH_END_DATE
) ;
--DBMS_OUTPUT.PUT_LINE(varCurrMoDateBeg);
SELECT MONTH_END_DATE INTO varCurrMoDateEnd FROM
(
SELECT
CALENDAR.MONTH_END_DATE MONTH_END_DATE
FROM
CALENDAR
WHERE
CALENDAR.CAL_TYPE='M'
AND (sysdate) BETWEEN CALENDAR.MONTH_BEG_DATE AND CALENDAR.MONTH_END_DATE
);
--DBMS_OUTPUT.PUT_LINE(varCurrMoDateEnd);
END;
SELECT :varCurrMoDateBeg, :varCurrMoDateEnd from dual;
在线资源:
SELECT INTO 语句 https://docs.oracle.com/cd/B14117_01/appdev.101/b10807/13_elems045.htm
plsql - 声明一个变量并从 Oracle 中的 SELECT 查询中设置它的值 - 代码日志 Declaring a variable and setting its value from a SELECT query in Oracle
PL/SQL SELECT INTO 语句练习示例 https://www.oracletutorial.com/plsql-tutorial/plsql-select-into/
Oracle 教程 - 将查询结果分配给变量 http://dba.fyicenter.com/faq/oracle/PL-SQL-Assign-Query-Results-to-Variables.html
【问题讨论】:
-
您没有从您提供的这些链接中得到任何答案吗?您正在使用 pl/sql 匿名块,变量的范围以
end关键字结尾。你想用最后一个查询做什么,显然会给你空值。 -
要使用绑定变量从匿名块中获取值,您需要使用
SELECT MONTH_BEG_DATE INTO :varCurrMoDateBeg,变量名中带有冒号。这还需要在其他地方创建绑定变量(特定于工具)。如果您只想看到它有效,请在您的块中使用DBMS_OUTPUT.PUT_LINE来显示您的局部变量值。 -
@TadHarrison 我想在 SELECT 语句中使用变量,正如我在帖子中解释的那样——
SELECT * FROM mytable WHERE DateField >= :varCurrMoDateBeg。您能否提供答案如何从匿名块中获取价值?该查询将用于在 SSRS 报告中创建数据集。 -
Using Bind Variables 在蟾蜍中
-
相信您对T-SQL 和PL/SQL 的区别可能存在根本性的误解。在 T-SQL 中,您可以使用 T-SQL 中的选择语句返回数据集。 Oracle 不允许这样做。在 Oracle 中最接近这一点的是管道函数,虽然并不难,但管道函数需要做一些设置,并且在性能方面可能会很昂贵。即使这样,PL/SQL 也不是像 T-SQL 那样被设计为交互式的。我用过这两种语言,有时我希望 PL/SQL 像 T-SQL 一样具有解释性,但有时我很高兴它不是。