我有神谕。我的SP如下所示
create or replace
PROCEDURE GETMONITORING
(
v_namabarang in varchar2 default null,
v_JenisLayanan in varchar2 default null,
cv_1 IN OUT SYS_REFCURSOR
)
AS
v_where VARCHAR2(200);
v_Select VARCHAR2(200);
v_from VARCHAR2(200);
v_final VARCHAR2(200);
v_result VARCHAR2(200);
BEGIN
v_Select:='select * ';
v_from :='from permohonan ';
v_where :='where sysdate=sysdate ';
IF nvl(length(v_namabarang),0) <> 0 then
v_Where := v_Where || ' AND namabarang like ''' || v_namabarang|| '%'' ';
end if;
IF nvl(length(v_jenislayanan),0) <> 0 then
v_Where := v_Where || ' AND jenislayanan like ''' || v_jenislayanan || '%'' ';
end if;
v_final :=v_select|| v_from|| v_where;
dbms_output.put_line(v_result);
END;我试着用sqlplus来执行
SQL> var r refcursor;
SQL> exec getmonitoring('AC','1',:r);
SQL>print :r;结果是"ORA-24338":语句句柄未执行。
我是怎么用sqlplus来执行SP的?谢谢
发布于 2015-11-12 06:39:17
错误很明显,因为您从来没有打开、游标,而是将SYS_REFCURSOR作为OUT参数进行引用。
ORA-24338:语句句柄未执行 原因:在执行语句句柄之前尝试进行提取或描述。 操作:执行一条语句,然后获取或描述数据。
您需要将打开的游标用于.语句:
v_final :=v_select|| v_from|| v_where;
-- open the cursor
OPEN cv_1 FOR v_final;另外,当在SQL*Plus中编译PL/SQL时,如果您看到错误,则应该始终使用显示错误来查看完整的错误堆栈。
例如,
SQL> create or replace procedure p
2 as
3 begin
4 null
5 end;
6 /
Warning: Procedure created with compilation errors.
SQL> show errors
Errors for PROCEDURE P:
LINE/COL ERROR
-------- -----------------------------------------------------------------
5/1 PLS-00103: Encountered the symbol "END" when expecting one of the
following:
;
The symbol ";" was substituted for "END" to continue.因此,现在您知道确切的行号和错误消息,这将帮助您调试和修复错误。
https://stackoverflow.com/questions/33664397
复制相似问题