首页 > 解决方案 > dBEAVER 7.3.3 如何执行oracle存储过程

问题描述

请你能帮我在 dBEAVER 中运行/执行 oracle 程序吗?这是您可以看到输入参数的块 在 此处输入图像描述

标签: oracleprocedureexecutedbeaver

解决方案


带有 OUT 光标的过程

我发现无法使用光标输出参数执行过程并将其显示在结果网格中。因此,除了将游标绑定在匿名块中之外,我没有其他方法(然后对游标进行您需要的操作)。

CREATE PROCEDURE test_proc(
  datemin DATE,
  datemax DATE,
  RES OUT sys_refcursor
)
AS
BEGIN
 OPEN res
 FOR SELECT datemin + LEVEL
       FROM dual
    CONNECT BY LEVEL < datemax - datemin;
END;
DECLARE
  l_cur sys_refcursor;
  l_datemin DATE;
  l_datemax DATE;
  l_date date;
BEGIN
  l_datemin := to_date(:dmin, 'YYYY-MM-DD');
  l_datemax := to_date(:dmax, 'YYYY-MM-DD');
  
  -- execute the procedure
  test_proc(l_datemin, l_datemax, l_cur);

  -- do something with the cursor, here just print to output
  loop
    fetch l_cur into l_date;
    exit when l_cur%notfound;
    dbms_output.put_line(to_char(l_date, 'YYYY-MM-DD'));
  end loop;
END;

函数返回游标

这种情况看起来更好,返回的光标可以显示在查询网格中并检查它的值(您可能会被问到在执行查询时阻止关闭光标的设置,选择保持光标向上的选项)。

create or replace function test_fun(
  datemin DATE,
  datemax DATE
) return sys_refcursor
AS
  l_res sys_refcursor;
BEGIN
 OPEN l_res
 FOR SELECT datemin + LEVEL
       FROM dual
    CONNECT BY LEVEL < datemax - datemin;
 RETURN l_res;
END;
SELECT
  1 a,
  'xyz' b,
  test_fun(to_date(:dmin, 'YYYY-MM-DD'), to_date(:dmax, 'YYYY-MM-DD')) c
FROM dual;

在此处输入图像描述


推荐阅读