Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在oracle SQL中完成匿名块_Oracle_Plsql - Fatal编程技术网

在oracle SQL中完成匿名块

在oracle SQL中完成匿名块,oracle,plsql,Oracle,Plsql,尝试创建查询游标时,如下所示: DECLARE CURSOR Query1 IS SELECT * FROM RACE WHERE Race_Time='22-SEP-14 12.00.00.000000000'; BEGIN OPEN Query1; END; 我得到以下错误。匿名阻止已完成。有人知道如何解决这个问题吗?我试着设置 '打开服务器输出;' 在声明之前,但这似乎并没有修复错误。提前谢谢 匿名块已完成意味着您的PL/SQL代码已成功执行。 要显示:请尝试使用输出语句 例如:

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

DECLARE CURSOR Query1
IS
SELECT * FROM RACE 
WHERE Race_Time='22-SEP-14 12.00.00.000000000'; 
BEGIN
OPEN Query1;
END;
我得到以下错误。匿名阻止已完成。有人知道如何解决这个问题吗?我试着设置 '打开服务器输出;'
在声明之前,但这似乎并没有修复错误。提前谢谢

匿名块已完成意味着您的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;
VAR rc REFCURSOR;
BEGIN
  OPEN :rc
   FOR SELECT *
         FROM race
        WHERE race_time = '22-SEP-14 12.00.00.000000000'; 
END;
PRINT rc
但是,除非您的赋值需要使用显式游标,否则隐式游标可能更容易使用

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,还可以执行以下操作

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;
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实际上是一个时间戳,那么您应该将时间戳与另一个时间戳进行比较,而不是将时间戳与字符串进行比较。使用带有显式格式掩码的显式转换,以避免由于具有不同NLS设置的不同会话而导致的错误

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

当然,我不知道你为什么要在这里首先使用时间戳——你似乎不太可能真正知道比赛开始的纳秒数。

dbms\u输出似乎已关闭

如果打开SETSERVEROUTPUT,您可以看到输出;在脚本的开头


或者您可以查看dbms_输出窗口视图,然后查看dbms输出,然后按dbms输出窗口顶部的+键,然后选择打开的数据库

匿名块完成表示您的PL/SQL代码已成功执行。哦,对了。。那么如何显示光标结果呢?很抱歉,您给出的示例令人困惑,因为它与输出光标无关,而只是一行文本。按照您所说的,显示存储在我的游标中的内容只需:BEGIN dbmz_output.query1 END;这就是你的意思吗?我的甲骨文知识非常贫乏。请看这里:还有一个问题:是否有办法在获取的列之前放置文本,例如,如果我想在获取的第一个列之前放置“Race id:”,是否有办法做到这一点?否则,这只是一个数字显示up@user3357925-在这一点上,您只是将字符串连接起来,这样您就可以将任何您想要的内容放在那里了。”某物:“| | x.column1 | | |”其他:“| | x.column2 | |”。。。