【问题标题】:Display a table inside an Oracle procedure在 Oracle 过程中显示表
【发布时间】:2016-12-07 01:39:00
【问题描述】:

我正在使用 Oracle DB 12c 并使用 SQL Developer。

如果所有参数均为“null”,我如何显示过程中表的每一行。

我猜我的 IF 是正确的,我可能已经看到过两三个使用游标的帖子,但我对它们的使用不是很熟悉。

我希望它基本上是一个SELECT * FROM Salle,但有一个条件。

我在正确的轨道上吗?

CREATE OR REPLACE PROCEDURE Foo1 (noSalle in varchar2, Cat in varchar2, Nb in number)
IS
 cursor SYS_REFCURSOR; -- Not sure at all about that

BEGIN
  DBMS_OUTPUT.PUT_LINE('Salle : ' || noSalle || 'Cat : ' || Cat);
  IF (noSalle = null AND Cat = null AND Nb = null) THEN
    OPEN cursor FOR 
      SELECT * from Salle;     

  -- Some sort of FOR row IN cursor LOOP ?
  -- Display ALL rows of "Salle"

  END IF;

EXCEPTION 
  WHEN OTHERS THEN
  DBMS_OUTPUT.PUT_LINE('Erreur Oracle : '||sqlcode||' ; Message Oracle : '||sqlerrm);
END;

【问题讨论】:

  • 此链接包含如何定义游标、获取游标并显示结果的示例。我们可以为您解决问题,但由于它是基本的,建议您自行解决。 tutorialspoint.com/plsql/plsql_cursors.htm
  • 您不能像在 Sql Server 中那样在 oracle 程序中逐句显示内容。这实际上是关于创造输出。在 Oracle 中,它是严格的。你需要从存储过程中返回游标,然后用它做一些事情来显示数据

标签: oracle stored-procedures oracle-sqldeveloper


【解决方案1】:
  • SYS_REFCURSOR 用于保存表格数据,通常在您希望从函数返回此类数据时使用。

  • Null 比较不正确。请改用colname is null

如果您只想使用dbms_output.put_line 或类似的方式打印所有行,您可以这样做

for row in (select * from salle) loop
    dbms_output.put_line(row.col1||' '||row.col2);
end loop;

【讨论】:

  • 谢谢,这正是我想要的,感谢您对 SYS_REFCURSOR 的解释。我认为您不能简单地将查询放在 in 之后。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-02
  • 1970-01-01
  • 2018-07-14
  • 1970-01-01
  • 1970-01-01
  • 2021-10-20
  • 1970-01-01
相关资源
最近更新 更多