专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Oracle技术

很多人没注意的select into 有关问题讨论

发布时间:2010-05-20 14:01:29 文章来源:www.iduyao.cn 采编人员:星星草
很多人没注意的select into 问题讨论

CREATE OR REPLACE PROCEDURE insertBlob(id varchar2, imgFile varchar2)
IS
  img_file BFILE;
  img_blob BLOB;
  lob_length NUMBER;
BEGIN
     INSERT INTO personphoto VALUES(id,empty_blob());
     SELECT photo INTO img_blob FROM personphoto WHERE pid = id;    --    这里只是把photo 列值给了img_blob 
     img_file := bfilename('PHOTO',imgFile);
     dbms_lob.OPEN(img_file);
     lob_length := dbms_lob.getlength(img_file);
     dbms_lob.loadfromfile(img_blob,img_file,lob_length);                       --      这里只是把img_blob修改了,但是为什么会同时修改表personphoto 中photo 列对应的记录呢???????
     dbms_lob.close(img_file);
     COMMIT;
end;
/

比较

CREATE OR REPLACE PROCEDURE testinsert(in_SNO NUMBER)
IS
  u_name Varchar2(10);
BEGIN
     SELECT sname INTO u_name FROM STUDENT WHERE sno = in_SNO;   --   这里把sname列值给了u_name
     u_name := 'TTTT';                                                                                                      --    这里把u_name改变了,但是STUDENT 表中sname列对应的记录不会变。。。???????
     COMMIT;
END;
/


上面两个程序中都是用select into,但是第一个会把表的记录数据也修改,第二个却不会,这是为什么???????
------解决思路----------------------
lob类型确实不太一样,lob类型select into获取的是lob类型的存储地址
------解决思路----------------------
lob类型是个特例,分三个部分:Lob列、lob数据段、lob索引段进行存储
其他类型应该不存在类似问题
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: