我想插入一条数据 并返回它的CompanyID 我是这样写的 可是提示出错
请大家指一下 应怎么写 ,谢谢create or replace procedure SP_RONYEE_COMPANY_ADD
(
UserNAME in varchar2,
COMPANYNAME in varchar2,
COMPANYTYPE in number,
MANAGEMENTADDR in varchar2,
CALLING in varchar2,
MANUFACTURE in varchar2,
FLAG in Number,
COMPANYID out Number
)
 isbegin
INSERT INTO  ronyee_company (username, companyname,companytype,managementaddr,calling,manufacture, flag)
values
(''||username||'',''||companyname||'',''||companytype||'',''||managementaddr||'',''||calling||'',''||manufacture||'',''||flag||'');
 
set CompanyID := select Companyid from ronyee_company where Companyname=''||companyname||'' and UserNAME =''||username||'';
 
 
end SP_RONYEE_COMPANY_ADD;

解决方案 »

  1.   

    一般都是这样写的select   Companyid 
    into companyid
    from   ronyee_company   
    where   Companyname='' ¦ ¦companyname ¦ ¦''   and   UserNAME   ='' ¦ ¦username ¦ ¦'';    
      

  2.   

    begin end 里重新写INSERT   INTO     ronyee_company   (username,   companyname,companytype,managementaddr,calling,manufacture,   flag) 
    values 
    (:username,:companyname ,:companytype,:managementaddr,:calling,:manufacture,:flag); select   Companyid 
    into companyid
    from   ronyee_company   
    where   Companyname=:companyname    and   UserNAME   =:username; 
      

  3.   

    你这个列CompanyID是序列吗
      

  4.   

    转换一下思路,在指定的CompanyID的列上插入值
      

  5.   

    CompanyID 是自增的~ 2楼 hebo2005 的写的也报错啊
    错误如下
     
    Compilation errors for PROCEDURE RONYEE_ORACLE_DATABASE.SP_RONYEE_COMPANY_ADDError: PLS-00049: bad bind variable 'USERNAME'
    Line: 17
    Text: (:username,:companyname ,:companytype,:managementaddr,:calling,:manufacture,:flag);Error: PLS-00049: bad bind variable 'COMPANYNAME'
    Line: 17
    Text: (:username,:companyname ,:companytype,:managementaddr,:calling,:manufacture,:flag);Error: PLS-00049: bad bind variable 'COMPANYTYPE'
    Line: 17
    Text: (:username,:companyname ,:companytype,:managementaddr,:calling,:manufacture,:flag);Error: PLS-00049: bad bind variable 'MANAGEMENTADDR'
    Line: 17
    Text: (:username,:companyname ,:companytype,:managementaddr,:calling,:manufacture,:flag);Error: PLS-00049: bad bind variable 'CALLING'
    Line: 17
    Text: (:username,:companyname ,:companytype,:managementaddr,:calling,:manufacture,:flag);Error: PLS-00049: bad bind variable 'MANUFACTURE'
    Line: 17
    Text: (:username,:companyname ,:companytype,:managementaddr,:calling,:manufacture,:flag);Error: PLS-00049: bad bind variable 'FLAG'
    Line: 17
    Text: (:username,:companyname ,:companytype,:managementaddr,:calling,:manufacture,:flag);Error: PLS-00049: bad bind variable 'COMPANYNAME'
    Line: 22
    Text: where   Companyname=:companyname    and   UserNAME   =:username;Error: PLS-00049: bad bind variable 'USERNAME'
    Line: 22
    Text: where   Companyname=:companyname    and   UserNAME   =:username;
      

  6.   

    我这样写 对吗 能返回 CompanyID吗create or replace procedure SP_RONYEE_COMPANY_ADD
    (
    UserNAME in varchar2,
    COMPANYNAME in varchar2,
    COMPANYTYPE in number,
    MANAGEMENTADDR in varchar2,
    CALLING in varchar2,
    MANUFACTURE in varchar2,
    FLAG in Number,
    COMPANYID out Number
    )
    is
    begin
    INSERT INTO  ronyee_company (username, companyname,companytype,managementaddr,calling,manufacture, flag)
    values
    (''||username||'',''||companyname||'',''||companytype||'',''||managementaddr||'',''||calling||'',''||manufacture||'',''||flag||'');
    select   Companyid 
    into companyid
    from   ronyee_company   
    where   Companyname=''||companyname||''   and   UserNAME   =''||username||''; end SP_RONYEE_COMPANY_ADD;
      

  7.   

    但是我在用   companyParams[0].Value = userInfo.USERNAME;
            companyParams[1].Value = userInfo.companyInfo.COMPANYNAME;
            companyParams[2].Value = userInfo.companyInfo.COMPANYTYPE;
            companyParams[3].Value = userInfo.companyInfo.MANAGEMENTADDR;
            companyParams[4].Value = userInfo.companyInfo.CALLING;
            companyParams[5].Value = userInfo.companyInfo.MANUFACTURE;
            companyParams[6].Value = userInfo.companyInfo.FLAG;
            companyParams[7].Direction = ParameterDirection.Output;
    给调用的时候还是出 错,说输入类型不对是不是上面的过程写错了请大家帮忙~谢谢
      

  8.   

    错误信息为 
     ORA-06550: line 1, column 7:
    PLS-00306: wrong number or types of arguments in call to 'SP_RONYEE_COMPANY_ADD'
      

  9.   


       conn.Open();
                // Start an ADO.NET transactions
                using (OracleTransaction trans = conn.BeginTransaction())
                {
                    try
                    {
                        //Execute the 3 queries
                        rowsAffected = OraHelper.ExecuteNonQuery(trans, CommandType.StoredProcedure, "SP_RONYEE_USERBASEINFO_ADD", userParams);
                        rowsAffected += OraHelper.ExecuteNonQuery(trans, CommandType.StoredProcedure, "SP_RONYEE_COMPANY_ADD", companyParams); //就在这出错                    contacterParams[0].Value = int.Parse(companyParams[7].Value.ToString());
                        rowsAffected += OraHelper.ExecuteNonQuery(trans, CommandType.StoredProcedure, "SP_RONYEE_COMPANYCONTACT_ADD", contacterParams);                     rowsAffected += OraHelper.ExecuteNonQuery(trans, CommandType.StoredProcedure, "sp_ronyee_emailValidate_add", validateEmailParams);                    //if we reach this point then commit the database work
                        trans.Commit();
                    }
                    catch(Exception ex)
                    {
                        //if an expection occurs, rollback all the work
                        trans.Rollback();
                        rowsAffected = 0;
                    }
     
      

  10.   


    create or replace procedure SP_RONYEE_COMPANY_ADD 

      v_UserNAME   in   varchar2, 
      v_COMPANYNAME   in   varchar2, 
      v_COMPANYTYPE   in   number, 
      v_MANAGEMENTADDR   in   varchar2, 
      v_CALLING   in   varchar2, 
      v_MANUFACTURE   in   varchar2, 
      v_FLAG   in   Number, 
      v_COMPANYID   out   Number 

    is
    begin 
      INSERT INTO ronyee_company 
        (username,companyname,companytype,managementaddr,calling,manufacture,flag) 
        values (v_username ,v_companyname ,v_companytype ,v_managementaddr ,v_calling ,v_manufacture ,v_flag ); 
        
      select Companyid into v_COMPANYID
        from ronyee_company   
        where Companyname = v_companyname    
          and UserNAME =v_username ; 
    end SP_RONYEE_COMPANY_ADD; 
      

  11.   

    你SQL中的Companyid是不是SEQ产生的?
    要先创建SEQ,比如:
    create sequence SEQ_COMPANYID_ID
    minvalue 1
    maxvalue 9999999999
    start with 1
    increment by 1
    nocache;
      INSERT INTO ronyee_company 
        (Companyid, username,companyname,companytype,managementaddr,calling,manufacture,flag) 
        values (SEQ_COMPANYID_ID.NEXTVAL, v_username ,v_companyname ,v_companytype ,v_managementaddr ,v_calling ,v_manufacture ,v_flag ); 
        COMMIT;
      

  12.   

    楼上的答案不错,我写的语句有错误,冒号用错了,PB和PLSQL的搞混了
      

  13.   

    也可以使用“EXECUTE IMMEDIATE ”动态SQL,通过“USING”子句传值,“INTO”子句返回值。
      

  14.   

    我现在用这个 过程,还是不对 应该怎么改,create or replace procedure SP_RONYEE_COMPANY_ADD 

      v_UserNAME   in   varchar2, 
      v_COMPANYNAME   in   varchar2, 
      v_COMPANYTYPE   in   number, 
      v_MANAGEMENTADDR   in   varchar2, 
      v_CALLING   in   varchar2, 
      v_MANUFACTURE   in   varchar2, 
      v_FLAG   in   Number, 
      v_COMPANYID   out   Number 

    isbegin 
    declare Counts in Number;
    select companyID into Counts from ronyee_company where rownum=1 order by companyID desc;
      INSERT INTO ronyee_company 
        (username,companyname,companytype,managementaddr,calling,manufacture,flag,conpanyID) 
        values 
        (v_username ,v_companyname ,v_companytype ,v_managementaddr ,v_calling ,v_manufacture ,
        v_flag ,@Counts+1); 
     select Companyid into v_COMPANYID
        from ronyee_company   
        where Companyname = v_companyname    
          and UserNAME =v_username ;
    end SP_RONYEE_COMPANY_ADD; 
      

  15.   

    下面这样写 有错,怎么改?谢谢create sequence seq_test_ids 
    minvalue 6000
    maxvalue 99999999 
    start with 6000 
    increment by 1 
    nocache 
    order; create or replace trigger tri_test_id 
      before insert on ronyee_company   
      for each row 
    declare 
      nextid number; 
    begin 
      IF :new.CompanyID IS NULLor :new.CompanyID=0 THEN 
        select seq_test_id.nextval 
        into nextid 
        from sys.dual; 
        :new.id:=nextid; 
      end if; 
    end tri_test_id; 
      

  16.   

    不想用SEQ,是吧。OK,那就用最大值加1(很土啊)。
    临时变量位置要放好。另外,这个“@”用得很搞笑。create or replace procedure SP_RONYEE_COMPANY_ADD 

      v_UserNAME   in   varchar2, 
      v_COMPANYNAME   in   varchar2, 
      v_COMPANYTYPE   in   number, 
      v_MANAGEMENTADDR   in   varchar2, 
      v_CALLING   in   varchar2, 
      v_MANUFACTURE   in   varchar2, 
      v_FLAG   in   Number, 
      v_COMPANYID   out   Number 

    is
      Counts in Number(10);
    begin 
      select Nvl(Max(companyID), 0) into Counts from ronyee_company;  INSERT INTO ronyee_company 
        (username,companyname,companytype,managementaddr,calling,manufacture,flag,conpanyID) 
        values 
        (v_username ,v_companyname ,v_companytype ,v_managementaddr ,v_calling ,v_manufacture ,
        v_flag ,Counts+1); 
      Commit;  v_COMPANYID := Counts+1;
    end SP_RONYEE_COMPANY_ADD;
    还错的话,拜托把异常信息贴出来。
      

  17.   

    你按晓林的做个SEQ,不就写了,每次会自动加1的
      

  18.   

    这是我用晓林的方法做的 还是错..SEQ我没用过..
    create sequence seq_test_ids 
    minvalue 6000
    maxvalue 99999999 
    start with 6000 
    increment by 1 
    nocache 
    order; create or replace trigger tri_test_id 
      before insert on ronyee_company   
      for each row 
    declare 
      nextid number; 
    begin 
      IF :new.CompanyID IS NULL or :new.CompanyID=0 THEN 
        select seq_test_id.nextval 
        into nextid 
        from sys.dual; 
        :new.id:=nextid; 
      end if; 
    end tri_test_id;
      

  19.   

    19楼的错误信息为Compilation errors for PROCEDURE RONYEE_ORACLE_DATABASE.SP_RONYEE_COMPANY_ADDError: PLS-00103: Encountered the symbol "IN" when expecting one of the following:
           
              constant exception <an identifier>
              <a double-quoted delimited-identifier> table LONG_ double ref
              char time timestamp interval date binary national character
              nchar
    Line: 13
    Text: Counts in Number(10);Error: PLS-00103: Encountered the symbol ";" when expecting one of the following:
           
              . ( * % & - + / at loop mod remainder range rem ..
              <an exponent (**)> || multiset
    Line: 13
    Text: Counts in Number(10);Error: PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:
           
              pragma
    Line: 26
      

  20.   

    Counts in Number(10);
    改成:
    Counts    Number(10);
      

  21.   

    晓林把SEQ的语句都贴出来了,直接复制粘贴再执行
    基本上你把他写的全复制过去就行了
      

  22.   

    OK 了 结贴 发分 如果可以的话加我QQ 谢谢我QQ33471036