繁体   English   中英

oracle SQL中完成的匿名块

[英]anonymous block completed in oracle SQL

在尝试创建查询游标时,如下所示:

DECLARE CURSOR Query1
IS
SELECT * FROM RACE 
WHERE Race_Time='22-SEP-14 12.00.00.000000000'; 
BEGIN
OPEN Query1;
END;

我收到以下错误。 匿名块完成。 有谁知道如何解决这一问题? 我尝试设置“SET SERVEROUTPUT ON;” 在声明之前,但这似乎并没有解决错误。 提前致谢!

似乎dbms_output已关闭

如果您将SET SERVEROUTPUT ON;则可以看到已淘汰SET SERVEROUTPUT ON; 在脚本的开头。

或者,您可以查看dbms_output窗口(先查看,然后查看DBMS输出),然后按Dbms Output窗口顶部的“ +”,然后选择一个打开的数据库

“匿名块已完成”表示您的PL / SQL代码已成功执行。 显示:尝试使用输出语句...

例如:

 BEGIN
    dbms_output.put_line ('Hello, world!');
END;

如果要控制PL / SQL中的过程,则可以执行以下操作

DECLARE 
  l_race_rec race%rowtype;

  CURSOR Query1
  IS
    SELECT * 
      FROM RACE 
     WHERE Race_Time='22-SEP-14 12.00.00.000000000'; 
BEGIN
  OPEN Query1;
  LOOP
    FETCH query1 INTO l_race_rec;
    EXIT WHEN query1%notfound;

    dbms_output.put_line( l_race_rec.column1 || ' ' || l_race_rec.column2 || ... || l_race_rec.columnN );
  END LOOP;
  CLOSE Query1;    
END;

但是,除非您的分配要求使用显式游标,否则隐式游标可能更易于使用

BEGIN
  FOR x IN( SELECT * 
              FROM RACE 
             WHERE Race_Time='22-SEP-14 12.00.00.000000000')
  LOOP
    dbms_output.put_line( x.column1 || ' ' || x.column2 || ... || x.columnN );
  END LOOP;
END;

如果您使用的是SQL * Plus,还可以执行类似的操作

VAR rc REFCURSOR;
BEGIN
  OPEN :rc
   FOR SELECT *
         FROM race
        WHERE race_time = '22-SEP-14 12.00.00.000000000'; 
END;
PRINT rc

如果race_time确实是一个timestamp ,则应该将一个timestamp与另一个timestamp进行比较,而不是将timestamp与字符串进行比较。 将显式转​​换与显式格式掩码一起使用,以避免由于不同会话具有不同的NLS设置而导致的错误

WHERE race_time = to_timestamp( '22-SEP-14 12.00.00.000000000', 
                                'DD-MON-RR HH24:MI:SS.FF9' )

当然,我不确定您为什么首先要使用timestamp您似乎不太可能真正知道比赛开始的十亿分之一秒。

让我们运行语句“SET SERVEROUTPUT ON;”,因为 dbms_output 已关闭。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM