dBEAVER 7.3.3 如何执行oracle存储过程

问题描述

请你帮我在dBEAVER中运行/执行oracle程序吗? 这是您可以看到输入参数的块 enter image description here

解决方法

使用 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;

enter image description here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...