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语句怎么写如题 谢谢了