改进如下:
CREATE OR REPLACE procedure sp_binginsert(
   IN b_id varchar2,IN b_name varchar2 )
 as
 begin
  insert into bing (ID,NAME)
    values(b_id,b_name);  --不要加引号
 end;如果还提示错误,可以在sql*plus中输入show err查看错误行号和错误信息

解决方案 »

  1.   

    看看id字段类型是否匹配,最好成功加上commit
      

  2.   

    to: Michaelyfj(星星还是那颗星星)
       我如下操作了,出现以下错误,
       我的id 和name 的类型时varchar2(10),varchar2(50):
       我该怎么错误:
    过程SQL> CREATE OR REPLACE procedure sp_binginsert(
      2     IN b_id varchar2(10),IN b_name varchar2(50) )
      3     as
      4     begin
      5     insert into bing (ID,NAME)
      6      values('b_id','b_name')
      7      end  sp_binginsert ;
      8  /警告: 创建的过程带有编译错误。SQL> show err
    PROCEDURE SP_BINGINSERT 出现错误:LINE/COL ERROR
    -------- -----------------------------------------------------------------
    2/4      PLS-00103: Encountered the symbol "IN" when expecting one of the
             following:
             <an identifier> <a double-quoted delimited-identifier>
             current
      

  3.   

    CREATE OR REPLACE procedure sp_binginsert(
       IN b_id bing.id%type,IN b_name bing.name%type)  -- 類型匹配
     as
     begin
      insert into bing (ID,NAME)
        values(b_id,b_name);  --不要加引号 (星星还是那颗星星)
     end sp_binginsert;這樣編譯就應該沒問題了﹐只是調用的時候注意輸入的參數的合法性
      

  4.   

    CREATE OR REPLACE procedure sp_binginsert(
      b_id IN varchar2,
      b_name IN varchar2 )
     as
       begin
       insert into bing(ID,NAME)  values(b_id,b_name);
       commit;
       exception
         when others then
           begin
             raise_application_error(-20023,'插入失败:原因是‘||SQLERRM);
             rollback;
           end;
       end;
    试试看
      

  5.   

    补充一点
     b_id 与id 是不是同一数据类型的
     b_name 与name是不是同一数据类型的
      

  6.   

    CREATE OR REPLACE procedure sp_binginsert(
       b_id IN varchar2, b_name IN varchar2 )
     as
     begin
      insert into bing (ID,NAME)
        values(b_id,b_name); 
     end;
      

  7.   

    昨天的回復忘記了重要的一點﹐那就是在pro中一定要有commit
    要不﹐很容易就會出現死鎖的
      

  8.   

    哈哈,我终于找到答案了,昨天中午看到的!!---ORACLE_8i PL SQL高级程序设计-------第4章 创建子程序和包---------
    3. 对形参的限制
    调用过程时,实参的值将被传入该过程,这些实参在该过程内部以引用的方式使用形参。
    同时,作为参数传递机制一部分,对变量的限制也传递给该过程。在过程的声明中,强制指定
    参数C H A R和VA R C H A R 2的长度,以及指定N U M B E R参数的精度或小数点后位数都是非法的,
    这是因为这些限制可以从实参中获得。例如,下面的过程声明就是非法的并将引发编译错误:
    节选自在线代码ParameterLenght.sql
    CREATE OR REPLACE PROCEDURE ParameterLength (
    p_Parameter1 IN OUT VARCHAR2(10),
    p_Parameter2 IN OUT NUMBER(3,1)) AS
    BEGIN
    p_Parameter1 := 'abcdefghijklm';
    p_Parameter2 := 12.3;
    END ParameterLength;
    正确的声明应该是下面的代码:
    节选自在线代码ParameterLenght.sql
    CREATE OR REPLACE PROCEDURE ParameterLength (
    p_Parameter1 IN OUT VARCHAR2,
    p_Parameter2 IN OUT NUMBER) AS
    BEGIN
    p_Parameter1 := 'abcdefghijklmno';
    p_Parameter2 := 12.3;
    END ParameterLength;
    因此,是谁对形参p _ P a r a m e t e r 1和p _ P a r a m e t e r 2有限制呢?从上面的例子中,我们可以看出正
    是实参对形参施加了限制。如果我们使用下面的代码调用过程P a r a m e t e r L e n g t h的话:
      

  9.   

    注意:
    在过程的声明中,强制指定参数C H A R和VA R C H A R 2的长度,以及指定N U M B E R参数的精度或小数点后位数都是非法的,