[急,疑惑]有数据读不出来!

yuzl32 2005-08-19 04:25:23
表为:

CREATE TABLE TEST (ID0000 CHAR(10),ZWBH00 VARCHAR2(12),NAME00 VARCHAR2(20));


PL/SQL中测试执行:

CREATE OR REPLACE PROCEDURE SP_TEST
(
PI_ID0000 IN CHAR , -- 个人编号
PI_ZWBH00 IN CHAR -- 职务编号
)

IS
RT_RYXX TEST%ROWTYPE ; -- 人员信息
BEGIN
SELECT *
INTO RT_RYXX
FROM TEST
WHERE TRIM(ID0000) = TRIM(PI_ID0000) -- 个人编号
AND TRIM(ZWBH00) = TRIM(PI_ZWBH00); -- 职务编号

DBMS_OUTPUT.PUT_LINE(RT_RYXX.ZWBH00);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('EXCEPTION ERROR');
END ;


输入测试数据:

PI_ZWBH00 := '200507000482';
PI_ID0000 := '0000020783';


结果跳到: DBMS_OUTPUT.PUT_LINE('EXCEPTION ERROR');

同样:

PI_ID0000 IN CHAR , -- 个人编号
PI_ZWBH00 IN CHAR -- 职务编号
改为:
PI_ID0000 IN TEST.ID0000%TYPE, -- 个人编号
PI_ZWBH00 IN TEST.ZWBH00%TYPE -- 职务编号

依然跳到:DBMS_OUTPUT.PUT_LINE('EXCEPTION ERROR');

但是如果单独在:

DECLARE
RT_RYXX TEST%ROWTYPE;
PI_ID0000 TEST.ID0000%TYPE ; -- 改成为CHAR 不能读出数据,为什么?
PI_ZWBH00 TEST.ZWBH00%TYPE ; -- 同上
BEGIN
-- 赋初值
PI_ZWBH00 := '200507000482' ;
PI_ID0000 := '0000020783';

SELECT *
INTO rt_ryxx
FROM TEST -- 工伤人员信息表
WHERE trim(ID0000) = trim(PI_ID0000) -- 个人编号
AND trim(ZWBH00) = trim(PI_ZWBH00); -- 工伤事故号

DBMS_OUTPUT.put_line(rt_ryxx.ZWBH00) ;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('EXCEPTION ERROR');
END;

却可以读出结果:'200507000482'

为什么?大虾们帮帮忙啊,急.

...全文
97 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
njhart2003 2005-08-20
  • 打赏
  • 举报
回复
问题出在这儿:
WHERE TRIM(ID0000) = TRIM(PI_ID0000) -- 个人编号
AND TRIM(ZWBH00) = TRIM(PI_ZWBH00); -- 职务编号


不允许对输入参数进行运算!即不允许改变输入参数的值!
trim(...)函数去除了输入参数中的空格,改变了输入参数。
honghulong 2005-08-19
  • 打赏
  • 举报
回复
wsm 我也不知道,但是我把输入参数该成varchar2 就好了

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧