我试图根据网络ID获取用户的ID号,但由于某种原因,当我尝试传入在这个PL/SQL中的SELECT
语句的WHERE
子句中的网络ID我得到一个错误。为什么在将字符串变量传递到PL/SQL时出现'No data found',其中子句
但是,如果我输出user_rec.USER_NAME
到控制台有什么有效的值,如果我硬编码一个字符串ex:WHERE UserID = 'USERNAME'
它也可以按预期工作。它似乎只对WHERE
条款中的字符串变量失败.....?
ORA-01403: no data found
ORA-06512 at line 12
01403.00000 - "no data found"
*Cause
*Action
Error at line 1
PL/SQL:
DECLARE
v_addressbooknum number;
v_addresstype nchar(3);
CURSOR SELECT_PORTALUSERS is
SELECT USER_NAME FROM PERSONS WHERE DEFAULT_GROUP <> 'Employees';
BEGIN
FOR user_rec IN SELECT_PORTALUSERS LOOP
-- Fetch Address Book # based on user ID
SELECT ABNum INTO v_addressbooknum
FROM [email protected]
WHERE UserID = user_rec.USER_NAME;
END LOOP;
END;
============================== ======================================= 编辑
这里是我根据DCookie的建议运行的新PL/SQL
DECLARE
v_addressbooknum number;
v_addresstype nchar(3);
CURSOR SELECT_PORTALUSERS is
SELECT USER_NAME FROM PERSONS WHERE DEFAULT_GROUP <> 'Employees';
BEGIN
FOR user_rec IN SELECT_PORTALUSERS LOOP
-- DEBUG --
DBMS_OUTPUT.PUT_LINE('DEBUG Found User: ' || user_rec.USER_NAME);
-- END DEBUG --
BEGIN
-- Fetch Address Book # based on user ID
SELECT ABNum INTO v_addressbooknum
FROM [email protected]
WHERE UserID = user_rec.USER_NAME;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('User: '||user_rec.USER_NAME);
END;
END LOOP;
-- DEBUG --
DBMS_OUTPUT.PUT_LINE('DONE');
-- END DEBUG --
END;
这里是我得到的输出,你可以看到如果发现user_rec.user_name
中的值。如果我将其中一个找到的用户ID硬编码到where子句中,它可以正常工作(这意味着用户ID存在于正在执行提取的表中)。
DEBUG Found User: USER846
User: USER846
DEBUG Found User: USER241
User: USER241
DEBUG Found User: USER780
User: USER780
DEBUG Found User: USER783
User: USER783
DEBUG Found User: USER294
User: USER294
DONE
所以我在循环的开始(前BEGIN)增加了'DBMS_OUTPUT',并添加'EXCEPTION '按照你的建议。但现在我得到:“DEBUG USERNAME:USER1 \ n用户:USER1 \ n DEBUG USERNAME:USER2 \ n用户:User2”因此它找到一个值,但仍然认为那里没有一个值。 – ProfessionalAmateur 2011-04-19 21:03:35
您的异常处理程序正在触发的事实表明该值不存在。你确定用户名中没有任何额外的空格吗?尝试:SELECT DUMP(USER_NAME,17)FROM PERSONS WHERE DEFAULT_GROUP <>'Employees';在命令提示符处并确保返回的值看起来合理。 – DCookie 2011-04-20 01:55:50
我将在上面的编辑中发布Im正在运行的和DBMS输出,以便我可以使用更多字符并正确格式化。 FOR循环对每个用户ID都是循环的。 – ProfessionalAmateur 2011-04-20 03:22:01