【发布时间】: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视图时,请查看status和sql_id列。Status显示会话现在是否执行任何操作,sql_id包含当前正在运行的查询的标识符,您可以在v$sql视图中找到该标识符。您也可以使用包dbms_application_info进行调试。抱歉,忘了早点回答。
标签: stored-procedures oracle11g