Sql select语句中的Oracle变量为空值

Sql select语句中的Oracle变量为空值,sql,oracle,toad,Sql,Oracle,Toad,在Oracle SQL语句中,我需要从Select语句中分配变量值。我是根据行文档做的,但是变量值是空的 在SQL server中,我需要执行以下操作 DECLARE @variable INT; SELECT @variable= mycolumn from myTable; 在Oracle中,这里是我遇到问题的输出和查询。我正在使用蟾蜍客户端。 我的目标是将变量值用作查询的一部分 下面是一个简单的预期用途示例 从mytable中选择*其中日期字段>=:varCurrMoDateBeg 网上

在Oracle SQL语句中,我需要从Select语句中分配变量值。我是根据行文档做的,但是变量值是空的

在SQL server中,我需要执行以下操作

DECLARE @variable INT;
SELECT @variable= mycolumn from myTable;
在Oracle中,这里是我遇到问题的输出和查询。我正在使用蟾蜍客户端。 我的目标是将变量值用作查询的一部分

下面是一个简单的预期用途示例

从mytable中选择*其中日期字段>=:varCurrMoDateBeg

网上资料来源:

SELECT INTO语句

plsql-声明变量并通过Oracle中的SELECT查询设置其值-堆栈溢出

PL/SQL SELECT INTO语句的实践示例

Oracle教程-将查询结果分配给变量
使用蟾蜍,一个小例子

declare
v_var date;
v_bind date :=to_date('01.01.2020','DD.MM.YYYY');
v_stm varchar2(4000);
v_counter pls_integer;
begin
select sysdate into v_var from dual ;
dbms_output.put_line(v_var);
execute immediate ' select sysdate from dual ' into v_var ;
dbms_output.put_line(v_var);
-- with bind  
v_stm :=  ' select count(*) from dba_objects where created > :1 '  ;
execute immediate v_stm into  v_counter using  v_bind;
dbms_output.put_line(v_counter);
end;
/
当我运行这个代码时


如您所见,这是一段非常简单的代码,演示了如何在PL/SQL中使用绑定变量。

您可以为当前PL/SQL块之外要使用的每个日期创建一个函数。这里有一个粗略的例子来说明如何使其发挥作用

CREATE OR REPLACE FUNCTION varCurrMoDateBeg
返回日期 像 dt_工作日期; 开始 -将此替换为您的查询 从dual中选择SYSDATE进入dt_工作

RETURN dt_Work;
结束Varcurmodatebeg; /


你没有从你提供的这些链接中得到任何答案吗?您使用的是pl/sql匿名块,变量的作用域以end关键字结尾。对于最后一个显然会给您空值的查询,您试图做什么。要使用绑定变量从匿名块中获取值,您需要使用SELECT MOUNT\u BEG\u DATE INTO:varCurrMoDateBeg,变量名称中带有冒号。这还需要在特定于工具的其他位置创建绑定变量。如果您只想看到这一点,请在块中使用DBMS_OUTPUT.PUT_行来显示您的局部变量值。@Tadharison我想在SELECT语句中使用该变量,正如我在post-SELECT*FROM mytable WHERE DateField>=:varCurrMoDateBeg中解释的那样。您能否提供如何从匿名块中获取值的答案?该查询将用于在SSRS报告中创建数据集。总之,我相信您可能对T-SQL和PL/SQL之间的差异有一个基本的误解。在T-SQL中,您可以使用T-SQL中的select语句返回数据集。甲骨文不允许这样做。在Oracle中,最接近这一点的方法是使用管道函数,虽然并不困难,但管道函数需要花费一些时间来设置,而且在性能方面可能代价高昂。即使如此,PL/SQL也不像T-SQL那样被设计为交互式的。我已经使用了这两种语言,有时我希望PL/SQL像T-SQL一样具有解释性,有时我很高兴它不是。
RETURN dt_Work;
SELECT varCurrMoDateBeg FROM dual;