日期:2014-05-16  浏览次数:20903 次

求一个表值函数,谢谢
传入一个参数到函数中,然后根据该参数查询表,如果表中有数据,就返回表的该条数据,如果表中没有,就返回空表值记录,求该表值函数怎么写?
比如:
有A表,表中有id,name ,value 三个字段,其中有id=1的一条数据
id  name  value
1    xxx        ss

当函数传入参数id=1时,应返回 
id  name  value
1    xxx        ss
表值记录
如果 id=2时,应返回
id  name  value
2            
空表值记录

------解决方案--------------------
引用:
Quote: 引用:


CREATE OR REPLACE FUNCTION TEST1(V_ID VARCHAR2) RETURN SYS_REFCURSOR IS
  RESULT SYS_REFCURSOR;
BEGIN
  OPEN RESULT FOR
    SELECT T1.ID, T2.NAME, T2.VALUE
      FROM (SELECT V_ID ID FROM DUAL) T1,
           (SELECT ID, NAME, VALUE FROM TEST) T2
     WHERE T1.ID = T2.ID(+);
  RETURN(RESULT);
END TEST1;


额,可能我没有表达清楚,我最后要的是一条表集合记录。
当传入V_ID进来的时候,我要去判断这个V_ID是否在A表中,如果在就返回A表中的记录,如果不在就要返回一个只有id有值,其它字段的值为空的表值记录
select count(*) into v_count from A  t where t.ID=V_ID;
if (v_count = 0) then
SELECT id,'' as name, '' as value  FROM dual;
else 
  SELECT t.ID,t.Name,t.Value FROM  A t WHERE t.ID=V_ID;

没错啊,就是这样的啊。。。你的意思是你接收不了cursor?需要rowtype?