Oracle11g PLS-00428:此SELECT语句和BEGIN/END中应包含INTO子句

Oracle11g PLS-00428:此SELECT语句和BEGIN/END中应包含INTO子句,oracle11g,oracle-sqldeveloper,Oracle11g,Oracle Sqldeveloper,我的目标是开发一个存储过程,循环从开始日期到结束日期的日期,并在WHERE子句中使用这些日期。为了实现这个目标,我想从小事做起,首先得到一个日期列表。然后,我将这些日期转换为变量。我已经看过很多例子,但似乎还停留在如何在Oracle SQL Developer(11.2;4.1.3)中实现块代码上 我试图更好地理解这一点的原因: SPOOL "C:\temp\selected_dates.csv"; SELECT ROWNUM - 1 + TO_DATE('2018-08-01

我的目标是开发一个存储过程,循环从开始日期到结束日期的日期,并在WHERE子句中使用这些日期。为了实现这个目标,我想从小事做起,首先得到一个日期列表。然后,我将这些日期转换为变量。我已经看过很多例子,但似乎还停留在如何在Oracle SQL Developer(11.2;4.1.3)中实现块代码上

我试图更好地理解这一点的原因:

SPOOL "C:\temp\selected_dates.csv";
  SELECT 
      ROWNUM - 1 + TO_DATE('2018-08-01', 'yyyy-mm-dd') AS selected_dates
  --INTO table_var
  FROM
      SYS.ALL_OBJECTS
  WHERE
      ROWNUM < TO_DATE('2018-08-07', 'yyyy-mm-dd') 
          - TO_DATE('2018-08-01', 'yyyy-mm-dd')
          + 2
  ;
/
SPOOL OFF;
SPOOL“C:\temp\selected\u dates.csv”;
挑选
ROWNUM-1+截止日期(“2018-08-01”,“yyyy-mm-dd”)作为所选日期
--进入表_var
从…起
SYS.ALL_对象
哪里
ROWNUM<截止日期('2018-08-07','yyyy-mm-dd')
-截止日期(“2018-08-01”、“yyyy-mm-dd”)
+ 2
;
/
关闭;
然而,我收到

PLS-00428:此SELECT语句中应包含INTO子句

添加开始/结束时:

SPOOL "C:\temp\selected_dates.csv";
BEGIN
  SELECT 
      ROWNUM - 1 + TO_DATE('2018-08-01', 'yyyy-mm-dd') AS selected_dates
  --INTO table_var
  FROM
      SYS.ALL_OBJECTS
  WHERE
      ROWNUM < TO_DATE('2018-08-07', 'yyyy-mm-dd') 
          - TO_DATE('2018-08-01', 'yyyy-mm-dd')
          + 2
  ;
END;
/
SPOOL OFF;
SPOOL“C:\temp\selected\u dates.csv”;
开始
挑选
ROWNUM-1+截止日期(“2018-08-01”,“yyyy-mm-dd”)作为所选日期
--进入表_var
从…起
SYS.ALL_对象
哪里
ROWNUM<截止日期('2018-08-07','yyyy-mm-dd')
-截止日期(“2018-08-01”、“yyyy-mm-dd”)
+ 2
;
结束;
/
关闭;

因为begin/end在PL/SQL中生成,而不是在SQL中生成。我不明白你想做什么;您想要一个日期列表,然后对每个日期进行单独的查询?为什么不立即查询整个日期范围?@AlexPoole感谢您的回复。我希望能够创建一个存储过程,为从开始日期到结束日期的每个指定日期创建一个csv文件<代码>创建存储过程(开始日期、结束日期)为SELECT*FROM table,其中table\U date\U column=date1这是不完整的,但我想继续努力。如何创建一个过程,为某个范围内的每个日期导出csv?嗯,
spool
是一个客户机/IDE命令,因此不能在PL/SQL中使用它。您通过PL/SQL(通过
utl_file
)进行的任何文件操作都将在DB服务器上,而不是在您的客户端PC上(假设它们是不同的机器,是吗?)。如果必须在客户机上,那么创建一个包含日期和后期处理的单个文件可能会更容易,并将其保存到多个文件中。否则,您需要根据日期范围生成一个脚本文件并运行它。这取决于需要创建文件的位置(客户端/服务器)。是的,我想在客户端生成文件。因此,我采用了第二种方法并使用了
DMBS_OUTPUT.PUT_LINE()
生成SQL脚本。这正是我所需要的。谢谢你的帮助!。。现在,我正在研究如何从客户端读取文件。我想要运行的实际查询足够大,因此我宁愿将其与
DMBS\u输出分开生成它的脚本..与您讨论这个问题有很大帮助。