SQL语句返回插入ID,有插入,难道没法做到?!!

蔡袅 2013-08-05 09:02:26
接上贴,http://bbs.csdn.net/topics/390535271


语句是这样,需要加入一个操作:

DECLARE
V_SEQID NUMBER;
BEGIN
SELECT SEQ_QQGROUP_ID.NEXTVAL INTO V_SEQID FROM DUAL;
Insert into T_BD_GROUPHEADER
(GH_ID,
GH_Name,
GH_TYPE,
GH_LOGO,
GH_SUMMARY,
GH_NOTICE_RTF,
GH_OP_ID_CREATOR,
GH_CREATOR_NAME)
Values
(V_SEQID,
'江正(1001286) 创建的讨论组',
'2',
NULL,
'江正(1001286) 创建于 08月-02日',
NULL,
'828',
'江正');
INSERT INTO T_BD_GROUPLINE
(OP_ID, GH_ID, GL_OP_ALIAS)
Select 828, V_SEQID, '江正(1001286)'
FROM DUAL
UNION
Select 1474, V_SEQID, '陈维(1002392)'
FROM DUAL
UNION
Select 726, V_SEQID, '姚婕(1001068)'
FROM DUAL
UNION
Select 13, V_SEQID, '张莉(1000013)'
FROM DUAL
UNION
Select 468, V_SEQID, '庄艳(1000611)' FROM DUAL;
COMMIT;
END;

返回插入的V_SEQID,希望插入完后能SELECT出来写在一个SQL里面
...全文
236 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
sasacat 2013-08-05
  • 打赏
  • 举报
回复
这个不就是吗,return GH_ID into V_SEQID 就是把主键给你啦。 Insert into T_BD_GROUPHEADER (GH_ID, GH_Name, GH_TYPE, GH_LOGO, GH_SUMMARY, GH_NOTICE_RTF, GH_OP_ID_CREATOR, GH_CREATOR_NAME) Values (SEQ_QQGROUP_ID.NEXTVAL, '江正(1001286) 创建的讨论组', '2', NULL, '江正(1001286) 创建于 08月-02日', NULL, '828', '江正') return GH_ID into V_SEQID;
蔡袅 2013-08-05
  • 打赏
  • 举报
回复
引用 10 楼 sasacat 的回复:
oracle 的返回语法跟MS-SQL的不太一样呢,要返回一个值不是这样操作的。返回记录集也不能用直接用个SELECT查询出来就行了。 这是返回单个值的存储过程 create or replace procedure myPor(v_eno in number,v_ename out varchar2,v_sal out number,v_job out varchar2) is begin select ename,sal,job into v_ename,v_sal,v_job from emp where eno=v_eno; end; 这是返回结果集的存储过程 create or replace procedure sp_pro (spNo in number,p_cursor out testpackage.test_cursor) is begin open p_cursor for select * from emp where deptno=spNo; close p_cursor; end;
那有没有一种方式,在SQL语句(非存储过程)中执行完插入删除或更新操作直接查出上述操作的主键ID 呢?
sasacat 2013-08-05
  • 打赏
  • 举报
回复
oracle 的返回语法跟MS-SQL的不太一样呢,要返回一个值不是这样操作的。返回记录集也不能用直接用个SELECT查询出来就行了。 这是返回单个值的存储过程 create or replace procedure myPor(v_eno in number,v_ename out varchar2,v_sal out number,v_job out varchar2) is begin select ename,sal,job into v_ename,v_sal,v_job from emp where eno=v_eno; end; 这是返回结果集的存储过程 create or replace procedure sp_pro (spNo in number,p_cursor out testpackage.test_cursor) is begin open p_cursor for select * from emp where deptno=spNo; close p_cursor; end;
蔡袅 2013-08-05
  • 打赏
  • 举报
回复
引用 8 楼 sasacat 的回复:
那最后再执行一次select V_SEQID from dual?
可是放哪里都出现语法错误呢。
sasacat 2013-08-05
  • 打赏
  • 举报
回复
那最后再执行一次select V_SEQID from dual?
蔡袅 2013-08-05
  • 打赏
  • 举报
回复
引用 5 楼 sasacat 的回复:
Insert into T_BD_GROUPHEADER (GH_ID, GH_Name, GH_TYPE, GH_LOGO, GH_SUMMARY, GH_NOTICE_RTF, GH_OP_ID_CREATOR, GH_CREATOR_NAME) Values (V_SEQID, '江正(1001286) 创建的讨论组', '2', NULL, '江正(1001286) 创建于 08月-02日', NULL, '828', '江正') return id into V_SEQID;
不对哦,我是这样声明了 V_SEQID然后获取SEQ的下一个值赋给 V_SEQID然后先后插入到T_BD_GROUPHEADER,T_BD_GROUPLINE两个表中,最后我需要的一步操作是:做完所有的插入操作,执行一次查询V_SEQID,方便前台调用呢
sasacat 2013-08-05
  • 打赏
  • 举报
回复
错了,应该是 Insert into T_BD_GROUPHEADER (GH_ID, GH_Name, GH_TYPE, GH_LOGO, GH_SUMMARY, GH_NOTICE_RTF, GH_OP_ID_CREATOR, GH_CREATOR_NAME) Values (SEQ_QQGROUP_ID.NEXTVAL, '江正(1001286) 创建的讨论组', '2', NULL, '江正(1001286) 创建于 08月-02日', NULL, '828', '江正') return GH_ID into V_SEQID;
sasacat 2013-08-05
  • 打赏
  • 举报
回复
Insert into T_BD_GROUPHEADER (GH_ID, GH_Name, GH_TYPE, GH_LOGO, GH_SUMMARY, GH_NOTICE_RTF, GH_OP_ID_CREATOR, GH_CREATOR_NAME) Values (V_SEQID, '江正(1001286) 创建的讨论组', '2', NULL, '江正(1001286) 创建于 08月-02日', NULL, '828', '江正') return id into V_SEQID;
蔡袅 2013-08-05
  • 打赏
  • 举报
回复
引用 3 楼 xx_mm 的回复:
[quote=引用 2 楼 sasacat 的回复:] V_SEQID声明成INTEGER是不是就可以了
哦,现在不是数据类型不匹配,我希望的是: 返回插入的V_SEQID,希望插入完后能SELECT出来,所有的代码写在一个SQL里面 [/quote]外部程序得到的是SELECT V_SEQID的结果 ,所有的操作在一个SQL语句完成,MS-SQL就很容易做得到。。
蔡袅 2013-08-05
  • 打赏
  • 举报
回复
引用 2 楼 sasacat 的回复:
V_SEQID声明成INTEGER是不是就可以了
哦,现在不是数据类型不匹配,我希望的是: 返回插入的V_SEQID,希望插入完后能SELECT出来,所有的代码写在一个SQL里面
sasacat 2013-08-05
  • 打赏
  • 举报
回复
V_SEQID声明成INTEGER是不是就可以了
蔡袅 2013-08-05
  • 打赏
  • 举报
回复
我在等待中哦。。。。

17,377

社区成员

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

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