Oracle 输入参数无法得到结果

Posted

技术标签:

【中文标题】Oracle 输入参数无法得到结果【英文标题】:Oracle input parameter not able to get results 【发布时间】:2014-02-03 11:05:16 【问题描述】:

我有 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 打印的输入参数,但是服务器没有执行条件我在哪里出错了

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)

【问题讨论】:

能否请您提供“desc DIVISION_TBL”的结果?还是只列出所有列及其数据类型? 我已经编辑了帖子 dept_code=RPAD(p_dept_name,10); CHAR 总是填充所有分配的空间。当您对字符串进行硬编码时,比较总是正确的。 我确实硬编码了当我右键单击并使用输入参数执行时我能够获取数据的 where 条件我无法获取数据 @OracleUser 感谢您的建议,它就像一个魅力 【参考方案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”。 varchar2(100) 仍然是“123”。

检查 char 和 varchar2 的差异,例如in Oracle docs

【讨论】:

以上是关于Oracle 输入参数无法得到结果的主要内容,如果未能解决你的问题,请参考以下文章

plsql调用oracle存储过程有输入参数和输出参数 sql语句怎么写如题 谢谢了

使用 Oracle 表作为输入参数编写 Oracle 存储过程

接口测试问题一之输入参数的解决

如何将结果集作为输入从java传递到oracle存储过程

Oracle使用简单函数

python 中subprocess实现一次输入一次输出(输入后处理得到的结果)