我有oracle存储过程,我传递一个输入参数并将游标作为输出参数:
CREATE OR REPLACE PROCEDURE OS_DIVISIONDDL(
p_dept_name IN VARCHAR2,
p_cursor_division OUT SYS_REFCURSOR
) IS
tmpVar NUMBER;
BEGIN
tmpVar := 0;
OPEN p_cursor_division FOR
select Division_code,
Division_name
from DIVISION_TBL
where dept_code=p_dept_name;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
WHEN OTHERS THEN
-- Consider logging the error and then re-raise
RAISE;
END OS_DIVISIONDDL;
/
输入参数我能看到使用dbms print,但是服务器没有执行条件我在哪里出错了
DIVISION_CODE CHAR (10 Char)
DIVISION_NAME VARCHAR2 (30 Char)
DEPT_CODE CHAR (10 Char)
COMPANY_CODE CHAR (3 Char)
LOCATION_CODE CHAR (3 Char)
CREATED_DATE TIMESTAMP(6)
CREATED_BY VARCHAR2 (50 Char)
MODIFIED_DATE TIMESTAMP(6)
MODIFIED_BY VARCHAR2 (50 Char)
答案 0 :(得分:1)
也许你有隐式转换的问题:
declare
a char(10) := '123';
b varchar2(100) := '123';
dummy integer;
begin
select null
into dummy
from dual
where a = b;
end;
此代码引发“未找到数据”但看起来完全相同。
这里的问题是char(10)不等于“123”但是等于“123 <7空格这里&gt;”。 varchar2(100)仍为“123”。
检查char和varchar2差异,例如in Oracle docs