Bre*_*chs 6 sql oracle plsql oracle10g
调试包过程并在实际存在数据时找到无数据.
只测试SELECT
SELECT trim(trailing '/' from GL_SECURITY) as DUMMY
FROM b2k_user@b2k
WHERE sms_username = 'FUCHSB';
Run Code Online (Sandbox Code Playgroud)
这愉快地回报了我的价值:'23706*706'
一旦我尝试选择INTO,我就会收到NO_DATA _FOUND错误(注释掉我输入的错误处理)
set serveroutput on
DECLARE
p_BAS_user_name varchar2(20);
v_gl_inclusion varchar2(1000);
v_gl_exclusions varchar2(1000);
BEGIN
--inputs
p_BAS_user_name := 'FUCHSB';
dbms_output.put_line(p_BAS_user_name);
----- GOOD -----
--BEGIN
SELECT trim(trailing '/' from GL_SECURITY) as DUMMY
INTO v_gl_inclusion
FROM b2k_user@b2k
WHERE sms_username = p_BAS_user_name;
--EXCEPTION
-- WHEN NO_DATA_FOUND THEN
-- v_gl_inclusion := 'SUPER EFFING STUPID';
--END;
dbms_output.put_line(v_gl_inclusion);
END;
Error report:
ORA-01403: no data found
ORA-06512: at line 12
01403. 00000 - "no data found"
*Cause:
*Action:
FUCHSB
Run Code Online (Sandbox Code Playgroud)
我可以很好地捕获错误,除了基于第一个查询的事实我知道100%在数据库中有一个FUCHSB的值.
任何想法..我真的开始鄙视甲骨文.是的,此查询正在数据链上运行,如第一个查询中所示数据存在.
谢谢
在SQL开发人员中解决了奇怪的行为导致我忽略了潜在的空白:
在执行'WHERE sms_username = p_BAS_user_name;'时,看起来SQL Developer在运行独立选择时会应用自己的修剪比较器.部分..当坐在包装中时它原来没有..一堆白色空间导致问题..仍然很奇怪,它返回正常选择.谢谢!
Vin*_*rat 12
我很确定我发现了这种行为的原因:我猜这个列实际上是CHAR类型而不是VARCHAR2.
考虑以下:
SQL> CREATE TABLE t (a CHAR(10));
Table created.
SQL> INSERT INTO t VALUES ('FUCHSB');
1 row created.
SQL> SELECT * FROM t WHERE a = 'FUCHSB';
A
----------
FUCHSB
SQL> DECLARE
2 l VARCHAR2(20) := 'FUCHSB';
3 BEGIN
4 SELECT a INTO l FROM t WHERE a = l;
5 END;
6 /
DECLARE
*
ERROR at line 1:
ORA-01403: no data found
ORA-06512: at line 4
Run Code Online (Sandbox Code Playgroud)
结论:
| 归档时间: |
|
| 查看次数: |
26285 次 |
| 最近记录: |