求一个表值函数,谢谢

grn0515 2014-03-17 10:21:47
传入一个参数到函数中,然后根据该参数查询表,如果表中有数据,就返回表的该条数据,如果表中没有,就返回空表值记录,求该表值函数怎么写?
比如:
有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
空表值记录
...全文
122 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
流浪川 2014-03-17
  • 打赏
  • 举报
回复
引用 8 楼 grn0515 的回复:
[quote=引用 7 楼 hidanger521 的回复:]

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;[/quote] 没错啊,就是这样的啊。。。你的意思是你接收不了cursor?需要rowtype?
grn0515 2014-03-17
  • 打赏
  • 举报
回复
引用 7 楼 hidanger521 的回复:

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;
流浪川 2014-03-17
  • 打赏
  • 举报
回复

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;
grn0515 2014-03-17
  • 打赏
  • 举报
回复
我希望返回的是一个表集合,然后我可以把这个表集合插入到另一个表里去
流浪川 2014-03-17
  • 打赏
  • 举报
回复
引用 4 楼 grn0515 的回复:
[quote=引用 1 楼 u011400422 的回复:] 需要写函数么 with tmp_test as (select 1 as a,'xxx' as b,'ss' as c from dual) select t2.a,t1.b,t1.c from tmp_test t1,(select &id as a from dual) t2 where t2.a = t1.a(+)
需要写函数,我这个函数有其它用处[/quote] 你希望的返回值是什么?一个cursor,还是字段的拼接组合,还是统计值?
grn0515 2014-03-17
  • 打赏
  • 举报
回复
引用 1 楼 u011400422 的回复:
需要写函数么 with tmp_test as (select 1 as a,'xxx' as b,'ss' as c from dual) select t2.a,t1.b,t1.c from tmp_test t1,(select &id as a from dual) t2 where t2.a = t1.a(+)
需要写函数,我这个函数有其它用处
grn0515 2014-03-17
  • 打赏
  • 举报
回复
引用 2 楼 hidanger521 的回复:
你想组织一个结果集返回么?
就想返回一个结果集
流浪川 2014-03-17
  • 打赏
  • 举报
回复
你想组织一个结果集返回么?
聪聪过客 2014-03-17
  • 打赏
  • 举报
回复
需要写函数么 with tmp_test as (select 1 as a,'xxx' as b,'ss' as c from dual) select t2.a,t1.b,t1.c from tmp_test t1,(select &id as a from dual) t2 where t2.a = t1.a(+)
grn0515 2014-03-17
  • 打赏
  • 举报
回复
引用 9 楼 hidanger521 的回复:
[quote=引用 8 楼 grn0515 的回复:] [quote=引用 7 楼 hidanger521 的回复:]

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;[/quote] 没错啊,就是这样的啊。。。你的意思是你接收不了cursor?需要rowtype? [/quote] 如果是rowtype要怎么写?

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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