接上贴,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里面SQLselectinsert

解决方案 »

  1.   

    V_SEQID声明成INTEGER是不是就可以了
      

  2.   

    哦,现在不是数据类型不匹配,我希望的是:
    返回插入的V_SEQID,希望插入完后能SELECT出来,所有的代码写在一个SQL里面 
      

  3.   

    哦,现在不是数据类型不匹配,我希望的是:
    返回插入的V_SEQID,希望插入完后能SELECT出来,所有的代码写在一个SQL里面 外部程序得到的是SELECT V_SEQID的结果 ,所有的操作在一个SQL语句完成,MS-SQL就很容易做得到。。
      

  4.   

      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;
      

  5.   

    错了,应该是
     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;
      

  6.   

    不对哦,我是这样声明了 V_SEQID然后获取SEQ的下一个值赋给 V_SEQID然后先后插入到T_BD_GROUPHEADER,T_BD_GROUPLINE两个表中,最后我需要的一步操作是:做完所有的插入操作,执行一次查询V_SEQID,方便前台调用呢
      

  7.   

    那最后再执行一次select V_SEQID from dual?
      

  8.   

    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;
      

  9.   

    那有没有一种方式,在SQL语句(非存储过程)中执行完插入删除或更新操作直接查出上述操作的主键ID 呢?
      

  10.   

    这个不就是吗,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;