查询丢失数据

progsky 2010-12-02 09:56:39
我在视图里调用了函数,如果用sql语句在pl/sql中执行,RECEIPTEXESMEMO列全部都有值,没有问题;但是通过程序查询时,RECEIPTEXESMEMO列在第五行以后的数据丢失了,全部为null值。

视图:
CREATE OR REPLACE VIEW V_FEE_RECEIPT AS
SELECT RECEIPT.RECEIPTINDEXID,
RECEIPT.RECEIPTCUSTOMERID,
FEs.f_Getreceiptbookingid(RECEIPT.RECEIPTINDEXID) AS RECEIPTEXESMEMO
FROM FES.T_FEE_RECEIPT RECEIPT
LEFT JOIN FES.T_FEE_INVOICE INVOICE ON
INVOICE.INVOICEINDEXID = RECEIPT.INVOICEINDEXID
函数:
create or replace function F_GETRECEIPTBOOKINGID( receiptindexid in varchar2 )
return varchar2
is
str_list varchar2(4000) default null;
str varchar2(20) default null;
begin
for x in ( SELECT ER.Bookingno
FROM FES.T_FEE_EXESRECEIPT ER
WHERE ER.RECEIPTID = receiptindexid ) loop
if not x.bookingno is null then
if INSTR(str_list, x.bookingno, 1, 1)='0' or INSTR(str_list, x.bookingno, 1, 1) is null then
str_list := str_list || str || to_char(x.bookingno);
str := ', ';
end if;
end if;
end loop;
return str_list;
end;

...全文
145 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
minitoy 2010-12-06
  • 打赏
  • 举报
回复
楼主找到原因没?
progsky 2010-12-02
  • 打赏
  • 举报
回复
实在是头疼,找不出来原因,但是我认为是从数据库里查询后返回到应用程序出问题了。但是也不知道怎么来确定!
progsky 2010-12-02
  • 打赏
  • 举报
回复
各位,我认为不是视图或者函数本身的问题,应该是数据库设置的问题或者别问题。
progsky 2010-12-02
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 zhuomingwang 的回复:]

SQL code
--把函数改成这样测试下看看什么结果
create or replace function F_GETRECEIPTBOOKINGID( receiptindexid in varchar2 )
return varchar2
is
str_list varchar2(4000) default null;
str varchar2(20) default nu……
[/Quote]
还是为空
  • 打赏
  • 举报
回复
 --把函数改成这样测试下看看什么结果
create or replace function F_GETRECEIPTBOOKINGID( receiptindexid in varchar2 )
return varchar2
is
str_list varchar2(4000) default null;
str varchar2(20) default null;
begin
for x in ( SELECT ER.Bookingno
FROM FES.T_FEE_EXESRECEIPT ER
WHERE ER.RECEIPTID = receiptindexid ) loop
if not x.bookingno is null then
if INSTR(str_list, x.bookingno, 1, 1)='0' or INSTR(str_list, x.bookingno, 1, 1) is null then
str_list := str_list || str || to_char(x.bookingno);
str := ', ';
end if;
else str_list:='test'; --如果x.bookingno为null则返回 test
end if;
end loop;
return str_list;
end;
心中的彩虹 2010-12-02
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 progsky 的回复:]
为了避免大家都一些顾虑,我详细的解释一下
一、如果单独执行函数没有任何问题
二、如果把不显示的那一列的数据拿出来单独通过视图查询,也能显示出来receiptexesmemo列值
三、数据没问题,因为我都已经查看过
四、现在的问题是,通过数据库直接执行sql和通过程序查询结果是不一样的。怀疑是不是通过程序查询时,对数据量还有一些别的限制造成的。
[/Quote]

RECEIPTEXESMEMO列在第五行以后的数据丢失了,全部为null值

这个情况在函数;里面返回什么值
progsky 2010-12-02
  • 打赏
  • 举报
回复
为了避免大家都一些顾虑,我详细的解释一下
一、如果单独执行函数没有任何问题
二、如果把不显示的那一列的数据拿出来单独通过视图查询,也能显示出来receiptexesmemo列值
三、数据没问题,因为我都已经查看过
四、现在的问题是,通过数据库直接执行sql和通过程序查询结果是不一样的。怀疑是不是通过程序查询时,对数据量还有一些别的限制造成的。
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 progsky 的回复:]
8楼
我已经说明了 就是如果在数据库里查询是没有任何问题的。在程序里第五行以后没数据,如果按你照你说的,我的查询因该那一列不可能有值的
[/Quote]不好意思我错了,你单独执行函数看看有没有数据出来
minitoy 2010-12-02
  • 打赏
  • 举报
回复
程序看着没什么问题.
贴几条view里是null的数据对应的基表数据看看.
感觉是数据的问题.
minitoy 2010-12-02
  • 打赏
  • 举报
回复
程序看着没什么问题.贴几条为空的数据对应的基表数据来看看
  • 打赏
  • 举报
回复

我错了
if not (1=1) is not null then 多了个not
该打啊
progsky 2010-12-02
  • 打赏
  • 举报
回复
8楼
我已经说明了 就是如果在数据库里查询是没有任何问题的。在程序里第五行以后没数据,如果按你照你说的,我的查询因该那一列不可能有值的
minitoy 2010-12-02
  • 打赏
  • 举报
回复
SQL> set serveroutput on
SQL>
SQL> declare
2 begin
3 if not 1 is null then
4 dbms_output.put_line('123');
5 end if;
6 end;
7
8 /

123

PL/SQL procedure successfully completed

SQL>
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 minitoy 的回复:]
哈,你没set serveroutput on.
应该是有输出的

引用 3 楼 zhuomingwang 的回复:
SQL code

已写入 file afiedt.buf

1 begin
2 if not (1=1) is not null then --1=1 为true没有输出el
3 dbms_output.put_line('el');
4 end if;
……
[/Quote] 我真的打开输出了 不信你也试试
minitoy 2010-12-02
  • 打赏
  • 举报
回复
哈,你没set serveroutput on.
应该是有输出的[Quote=引用 3 楼 zhuomingwang 的回复:]
SQL code

已写入 file afiedt.buf

1 begin
2 if not (1=1) is not null then --1=1 为true没有输出el
3 dbms_output.put_line('el');
4 end if;
5* end;
SQL> set serveroutput on;
SQL> /

PL……
[/Quote]
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 progsky 的回复:]
1楼的,那个只是个判断,和它没关系的
[/Quote]看我给的例子 你那个判断应该是写错了
if not x.bookingno is null then 如果x.bookingno为null才为TRUE 否则这个永远为FALSE
progsky 2010-12-02
  • 打赏
  • 举报
回复
4楼
那个在函数里返回的就是一个普通的字符串
minitoy 2010-12-02
  • 打赏
  • 举报
回复
等价于if x.bookingno is not null then[Quote=引用 1 楼 zhuomingwang 的回复:]
if not x.bookingno is null then
--这个是什么情况?
[/Quote]
progsky 2010-12-02
  • 打赏
  • 举报
回复
1楼的,那个只是个判断,和它没关系的
心中的彩虹 2010-12-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 progsky 的回复:]
我在视图里调用了函数,如果用sql语句在pl/sql中执行,RECEIPTEXESMEMO列全部都有值,没有问题;但是通过程序查询时,RECEIPTEXESMEMO列在第五行以后的数据丢失了,全部为null值。

视图:
CREATE OR REPLACE VIEW V_FEE_RECEIPT AS
SELECT RECEIPT.RECEIPTINDEXID,
RECEIPT.REC……
[/Quote]

RECEIPTEXESMEMO列在第五行以后的数据丢失了,全部为null值

这个情况在函数;里面返回什么值
加载更多回复(2)

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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