【问题标题】:Oracle stored procedure stuckOracle 存储过程卡住了
【发布时间】:2016-04-24 23:22:12
【问题描述】:

我在使用 oracle 11g 上的存储过程时遇到问题。

我创建了这个过程,当我在 sql developer 上运行它时,它卡住了。 执行永远不会结束,也不会打印任何内容。

程序:

create or replace PROCEDURE "GET_RECORDS_SP" (CURSOR_ OUT sys_refcursor, PARAM_0 VARCHAR2,PARAM_1 VARCHAR2)
AS
myquery varchar2(255);
  BEGIN  
    DBMS_OUTPUT.enable();
    DBMS_OUTPUT.PUT_LINE(PARAM_0);
    DBMS_OUTPUT.PUT_LINE('-- 1 --');
    CASE
      WHEN PARAM_0 = 'A' THEN 
        DBMS_OUTPUT.PUT_LINE('-- 2 --');
        myquery := 'SELECT * FROM table
               WHERE char_field = ''N'' and date_field is not null';
      WHEN PARAM_0 = 'B' THEN 
        DBMS_OUTPUT.PUT_LINE('-- 3 --');
        myquery:= 'SELECT * FROM table
              WHERE char_field = ''N'' and 
              date_field is not null and
              char_field2 = '''||PARAM_1||'''';
      WHEN PARAM_0 = 'C' THEN 
        DBMS_OUTPUT.PUT_LINE('-- 4 --');
        myquery:= 'SELECT * FROM table 
              WHERE char_field = ''N'' and
              date_field is not null 
              and char_field3 = ''S''';
    END CASE;

  DBMS_OUTPUT.PUT_LINE(myquery);
  OPEN CURSOR_ FOR myquery;
END;

如果我评论OPEN CURSOR_ FOR myquery; 行,它会打印A-- 1 ---- 2 -- 和查询SELECT * FROM table WHERE char_field = ''N'' and date_field is not null(在PARAM_0 中传递A)。

如果我尝试单独运行查询 SELECT * FROM table WHERE char_field = ''N'' and date_field is not null,它会执行并给我结果。

谁能告诉我我的程序出了什么问题? 谢谢!

【问题讨论】:

  • 你如何运行你的程序?
  • 我在 SQL Developer 上使用执行按钮 (Ctrl+F10) 运行它。
  • 您可以访问v$session 视图吗?我将从查询此视图开始,以了解数据库现在到底在做什么。
  • 不。 ORA-00942: table or view does not exist
  • 是的,可以。此外,当您查询v$session 视图时,请查看statussql_id 列。 Status 显示会话现在是否执行任何操作,sql_id 包含当前正在运行的查询的标识符,您可以在 v$sql 视图中找到该标识符。您也可以使用包dbms_application_info 进行调试。抱歉,忘了早点回答。

标签: stored-procedures oracle11g


【解决方案1】:

我意识到我查询的字段比我需要的要多。

所以我将查询更改为:

SELECT * FROM table WHERE char_field = ''N'' and date_field is not null';

收件人:

SELECT field1, field2, field3, field4 FROM table WHERE char_field = ''N'' and date_field is not null';

现在程序不再卡住了。它不是那么快,但我得到了结果。

【讨论】:

    猜你喜欢
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多