Oracle输入参数无法获得结果

时间:2014-02-03 11:05:16

标签: oracle plsql

我有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)

1 个答案:

答案 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