CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Oracle >  基础和管理

存储过程中的insert into的使用

楼主yesoon()2005-04-19 09:18:33 在 Oracle / 基础和管理 提问

有如下的存储过程  
  CREATE   OR   REPLACE   PROCEDURE   Sumcollect(Apply_Id_Value   VARCHAR2)   IS  
      Collect_Value       VARCHAR2(10);  
  BEGIN  
      SELECT   Lz_s_Transit_Apply_Collect.NEXTVAL  
      INTO       Collect_Value  
      FROM       Dual;  
      INSERT   INTO   Lz_t_Transit_Apply_Collect  
          (Collect_Id  
          ,Apply_Id  
          ,Tree_Id  
          ,Tree_Name  
          ,Standard_Id  
          ,Standard_Name  
          ,Breed_Name  
          ,Tree_Number  
          ,Datum_Area  
          ,Specification_Name)  
          (SELECT   Tree_Id  
                        ,Tree_Name  
                        ,Standard_Id  
                        ,Standard_Name  
                        ,Breed_Name  
                        ,SUM(Nvl(Tree_Number_2,   0))   Tree_Number  
                        ,SUM(Nvl(Datum_Area_2,   0))   Datum_Area  
            FROM       Lz_t_Transit_Apply_Info  
            WHERE     Apply_Id   =   Apply_Id_Value   AND  
                          Paper_Class_Code   <>   '4'  
            GROUP     BY   Tree_Id  
                              ,Tree_Name  
                              ,Standard_Id  
                              ,Standard_Name  
                              ,Breed_Name);  
  其中里面的Apply_ID与Collect_ID我如何加入insert   into中啊? 问题点数:50、回复次数:12Top

1 楼Alkeen()回复于 2005-04-19 09:37:55 得分 0

不太明白楼主的想法  
  我想把Collect_ID,Apply_ID直接放到select后面和group   by后面就应该可以了啦。Top

2 楼yesoon()回复于 2005-04-19 09:40:10 得分 0

意思是insert   into中Collect_ID,Apply_ID的值要从变量Apply_Id_Value   与变量Collect_Value中取值,其它的值从select中取值。Top

3 楼yesoon()回复于 2005-04-19 09:56:30 得分 0

在线等,急啊。Top

4 楼czrain(蝴蝶剑)回复于 2005-04-19 10:15:48 得分 20

CREATE   OR   REPLACE   PROCEDURE   Sumcollect(Apply_Id_Value   VARCHAR2)   IS  
      Collect_Value       VARCHAR2(10);  
  BEGIN  
       
      INSERT   INTO   Lz_t_Transit_Apply_Collect  
          (Collect_Id  
          ,Apply_Id  
          ,Tree_Id  
          ,Tree_Name  
          ,Standard_Id  
          ,Standard_Name  
          ,Breed_Name  
          ,Tree_Number  
          ,Datum_Area  
          ,Specification_Name)  
          (SELECT     Lz_s_Transit_Apply_Collect.NEXTVAL  
                        ,Apply_Id  
                        ,Tree_Id  
                        ,Tree_Name  
                        ,Standard_Id  
                        ,Standard_Name  
                        ,Breed_Name  
                        ,SUM(Nvl(Tree_Number_2,   0))   Tree_Number  
                        ,SUM(Nvl(Datum_Area_2,   0))   Datum_Area  
            FROM       Lz_t_Transit_Apply_Info  
            WHERE     Apply_Id   =   Apply_Id_Value   AND  
                          Paper_Class_Code   <>   '4'  
            GROUP     BY   Tree_Id  
                              ,Tree_Name  
                              ,Standard_Id  
                              ,Standard_Name  
                              ,Breed_Name);  
  Top

5 楼Alkeen()回复于 2005-04-19 10:22:39 得分 20

那就是说对那个select语句来说是常量  
  那只要直接把两个变量名Apply_Id_Value,Collect_Value写在select后面就行了。  
   
  SELECT   Apply_Id_Value  
                ,Collect_Value  
                        ,Tree_Id  
                        ,Tree_Name  
                        ,Standard_Id  
                        ,Standard_Name  
                        ,Breed_Name  
                        ,SUM(Nvl(Tree_Number_2,   0))   Tree_Number  
                        ,SUM(Nvl(Datum_Area_2,   0))   Datum_Area  
            FROM       Lz_t_Transit_Apply_Info  
            WHERE     Apply_Id   =   Apply_Id_Value   AND  
                          Paper_Class_Code   <>   '4'  
            GROUP     BY   Tree_Id  
                              ,Tree_Name  
                              ,Standard_Id  
                              ,Standard_Name  
                              ,Breed_NameTop

6 楼yesoon()回复于 2005-04-19 10:23:29 得分 0

出现如下错误:  
  PROCEDURE   NPLY.SUMCOLLECT   编译错误  
   
  错误:   PL/SQL:   ORA-02287:   此处不允许序号  
  行:   37  
  文本:   (SELECT   Lz_s_Transit_Apply_Collect_1.Nextval   Collect_IdTop

7 楼yesoon()回复于 2005-04-19 10:27:07 得分 0

Alkeen()   :  
  这样不行啊。出错。Top

8 楼fanjim0211(fjm)回复于 2005-04-19 10:39:10 得分 10

INSERT   INTO   Lz_t_Transit_Apply_Collect  
          (Collect_Id  
          ,Apply_Id  
          ,Tree_Id  
          ,Tree_Name  
          ,Standard_Id  
          ,Standard_Name  
          ,Breed_Name  
          ,Tree_Number  
          ,Datum_Area  
          ,Specification_Name)  
  这有10各字段,可是下面的只有7个字段,就算再加上Apply_ID与Collect_ID那也只有9个字段!试问9个字段怎么付给10个字段?  
  SELECT   Tree_Id  
                        ,Tree_Name  
                        ,Standard_Id  
                        ,Standard_Name  
                        ,Breed_Name  
                        ,SUM(Nvl(Tree_Number_2,   0))   Tree_Number  
                        ,SUM(Nvl(Datum_Area_2,   0))   Datum_Area  
            FROM       Lz_t_Transit_Apply_Info  
            WHERE     Apply_Id   =   Apply_Id_Value   AND  
                          Paper_Class_Code   <>   '4'  
            GROUP     BY   Tree_Id  
                              ,Tree_Name  
                              ,Standard_Id  
                              ,Standard_Name  
                              ,Breed_Name);  
  Top

9 楼yesoon()回复于 2005-04-19 10:45:13 得分 0

对了,少打了一个,  
  select  
  ,'CM'   Specification_NameTop

10 楼yesoon()回复于 2005-04-19 11:39:11 得分 0

Lz_s_Transit_Apply_Collect.NEXTVAL  
  其它的问题都解决了,现在就是上面这条语句,目的是取一个按原先的序号继续往下取,  
  在select   中如何解决。Top

11 楼yesoon()回复于 2005-04-19 15:12:25 得分 0

问题解决了。  
  代码更改如下:  
  CREATE   OR   REPLACE   PROCEDURE   Lz_t_Transit_Sumcollect(Apply_Id_Value   IN   VARCHAR2)   AS  
  BEGIN  
      INSERT   INTO   Lz_t_Transit_Apply_Collect_1  
          (Collect_Id  
          ,Apply_Id  
          ,Tree_Id  
          ,Tree_Name  
          ,Standard_Id  
          ,Standard_Name  
          ,Breed_Name  
          ,Tree_Number  
          ,Datum_Area  
          ,Specification_Name)  
          (SELECT   Fun_Collectnextval('1')   Collect_Id  
                        ,Apply_Id  
                        ,Tree_Id  
                        ,Tree_Name  
                        ,Standard_Id  
                        ,Standard_Name  
                        ,Breed_Name  
                        ,SUM(Nvl(Tree_Number_2,   0))   Tree_Number  
                        ,SUM(Nvl(Datum_Area_2,   0))   Datum_Area  
                        ,'CM'   Specification_Name  
            FROM       Lz_t_Transit_Apply_Info  
            WHERE     Apply_Id   =   Apply_Id_Value   AND  
                          Paper_Class_Code   <>   '4'  
            GROUP     BY   Tree_Id  
                              ,Tree_Name  
                              ,Standard_Id  
                              ,Standard_Name  
                              ,Breed_Name);  
    END   Lz_t_Transit_Sumcollect;  
  增加一个自定涵数:  
  CREATE   OR   REPLACE   FUNCTION   Fun_Collectnextval(Nextval_Sque   VARCHAR2)  
      RETURN   VARCHAR2   AS  
      p_Out   VARCHAR2(10);  
  BEGIN  
      IF   Nextval_Sque   =   '1'  
      THEN  
          SELECT   Lz_s_Transit_Apply_Collect_1.NEXTVAL  
          INTO       p_Out  
          FROM       Dual;  
          RETURN   p_Out;  
      ELSIF   Nextval_Sque   =   '2'  
      THEN  
          SELECT   Lz_s_Transit_Apply_Collect_2.NEXTVAL  
          INTO       p_Out  
          FROM       Dual;  
          RETURN   p_Out;  
      ELSE  
          SELECT   Lz_s_Transit_Apply_Collect.NEXTVAL  
          INTO       p_Out  
          FROM       Dual;  
          RETURN   p_Out;  
      END   IF;  
  END   Fun_Collectnextval;  
   
  Top

12 楼czrain(蝴蝶剑)回复于 2005-04-19 15:19:51 得分 0

先看看有没有这个序列号Lz_s_Transit_Apply_Collect,  
  select   Lz_s_Transit_Apply_Collect.NEXTVAL   from   dual  
   
  如果有是不是在当前用户下,不在当前用户下,就给这个序列号建个同义词吧!Top

相关问题

  • asp.net中如何使用存储过程
  • 怎么在存储过程中使用另一个存储过程的数据
  • asp.net中的存储过程,是否一定先在在SQL Server 中写有存储过程,才可以使用?
  • 使用SQL跟踪器如何能实现跟踪存储过程中嵌套的子存储过程
  • VB中如何使用SQL中的存储过程?
  • 存储过程中有多个select,如何在asp中使用?
  • adodc控件如何使用sqlserver7中的存储过程?
  • 在oracle中如何使用存储过程?
  • 在access中怎样使用存储过程
  • 有关存储过程中使用if的问题

关键词

  • transit
  • 字段
  • 解决
  • apply
  • tree
  • datum
  • lz
  • breed
  • standard
  • nextval

得分解答快速导航

  • 帖主:yesoon
  • czrain
  • Alkeen
  • fanjim0211

相关链接

  • Oracle类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo