gpt4 book ai didi

sql - ORACLE:找不到数据-但是数据存在

转载 作者:行者123 更新时间:2023-12-04 13:43:03 25 4
gpt4 key购买 nike

调试程序包过程,但实际上没有数据时,未找到任何数据。

仅测试SELECT

SELECT trim(trailing '/' from GL_SECURITY) as DUMMY 
FROM b2k_user@b2k
WHERE sms_username = 'FUCHSB';

这很高兴地返回我的值:'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

我可以很好地捕获该错误,除了基于第一个查询的事实,我知道100%的数据库中有FUCHSB的值。

任何想法..我真的开始鄙视Oracle。是的,此查询正在数据链接上运行,如第一个查询中所示,数据已存在。

谢谢

解决了SQL开发人员中的奇怪行为,使我忽略了潜在的空格:

看起来,SQL Developer在运行“独立选择”时执行“WHERE sms_username = p_BAS_user_name;”时会应用其自身的修整比较器。部分..当坐在包装盒中时,结果并没有..一堆空白引起了问题..仍然很奇怪,它在正常选择时返回。不过谢谢!

最佳答案

我很确定我找到了这种现象的原因:我猜测该列实际上是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

结论:
  • 使用CHAR数据类型时,将PL/SQL变量声明为CHAR。
  • 如果可能,请使用VARCHAR2数据类型来定义表列。 CHAR数据类型只是膨胀的VARCHAR2数据类型,不会在VARCHAR2数据类型之上添加任何功能(消耗更多空间/内存不是功能)。
  • 关于sql - ORACLE:找不到数据-但是数据存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8401785/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com