【问题标题】:datagrip debug oracle tips please请 datagrip 调试 oracle 提示
【发布时间】:2021-06-18 21:43:10
【问题描述】:

这里有一般提示调试 oracle 例程和/或带有 DataGrip 的软件包(甚至让它们启动/工作/调试)的人吗?

我遇到的问题是:

1我不明白 dataGrip 生成的代码的最后一部分

declare
    result NUMBER;
    someVar := 300198032;
begin
    result := FN_GET_CLIENT_ORG_SEQ(V_someVar => someVar );
    open ? for select result as result from dual;
end;

最后有这个“ open ? for select result as result from dual;”,到底是什么 open ?

当单击按钮进行调试时,它会显示此对话框,尝试了不同的组合(数字、字符串等)但 oracle 抱怨并且没有运行,我最终评论了该行以进行调试。

image of the dialogue

2 在单步执行时,我注意到在输入一些语句后,调试按钮会被禁用(跨步、单步执行等)。基本上 DataGrip 只是一直在思考/挂起,我无法继续调试。

示例,在这种情况下,我必须跨步以使调试继续工作,如果我确实跨步,它将挂起

SELECT something, something
    INTO somethingInto
    FROM some table

另一个例子, 如果 DataGrip 没有挂起或陷入困境,则需要跳过任何 End statmen(定义例程的结束)。

3 似乎更难将 DataGrip 调试例程包含在包中,要么调试过程开始出现问题,要么单步执行可能是使其工作的最安全方法。

任何专业提示将不胜感激

【问题讨论】:

    标签: oracle debugging datagrip


    【解决方案1】:

    我不了解 Datagrip,所以我无能为力。

    但是,看看这是否有帮助

    开放到底是什么?

    看起来像一个refcursor 企业。以下代码使用您在代码中看到的相同 open。它获取在deptno 等于result 局部变量值的部门工作的员工。

    SQL> set serveroutput on
    SQL> declare
      2    result number := 10;
      3    rc     sys_refcursor;               --> this is your "?" - a refcursor
      4    l_name emp.ename%type;
      5  begin
      6    open rc for select ename from emp   --> this is your "open"
      7                where deptno = result;
      8
      9    -- the following code just displays what's being fetched
     10    loop
     11      fetch rc into l_name;
     12      exit when rc%notfound;
     13      dbms_output.put_line(l_name);
     14    end loop;
     15    close rc;
     16  end;
     17  /
    CLARK
    KING
    MILLER
    
    PL/SQL procedure successfully completed.
    
    SQL>
    

    【讨论】:

    • 感谢伙伴,确实尝试过其他类型的游标,但您的特定类型使其工作!
    【解决方案2】:

    好吧,由于“跨过大多数“选择”或“结束”行,现在似乎事情变得更顺畅了。(避免数据手柄挂起/进入边缘)

    还通过声明 sys_refcursor 替换 ?,在调试时捕获/显示结果

    declare
        result NUMBER;
        someVar := 300198032;
    
        rc sys_refcursor;  -- < -- HERE
    
    begin
        result := FN_GET_CLIENT_ORG_SEQ(CLIENT_ID => someVar );
            -- HERE (below)
        open rc for select result as result from dual;
    end;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-07
      • 1970-01-01
      • 1970-01-01
      • 2021-06-22
      相关资源
      最近更新 更多