CREATE OR REPLACE PROCEDURE PR_get_order_num(o_order_num OUT char(15))
IS
BEGIN
  SELECT o_order_num:=(TO_CHAR(SYSDATE,'YYYYMMDD')||LPAD(TO_CHAR(seq_order_num.nextval),7,'0'));
END;
/警告: 创建的过程带有编译错误。不知道那里错了麻烦路过的各位

解决方案 »

  1.   

    SELECT TO_CHAR(SYSDATE,'YYYYMMDD')||LPAD(TO_CHAR(seq_order_num.nextval),7,'0'))
    into o_order_num
    from dual;
    这样写
      

  2.   

    这样也是错的
    SQL> CREATE OR REPLACE PROCEDURE PR_get_order_num(o_order_num OUT char(15))
      2  IS
      3  BEGIN
      4    SELECT TO_CHAR(SYSDATE,'YYYYMMDD')||LPAD(TO_CHAR(seq_order_num.nextval),7
    ,'0')) into o_order_num from dual;
      5  END;
      6  /警告: 创建的过程带有编译错误。
      

  3.   

    CREATE OR REPLACE PROCEDURE PR_get_order_num(o_order_num OUT char(15))
    改成
    CREATE OR REPLACE PROCEDURE PR_get_order_num(o_order_num OUT char)
      

  4.   

    CREATE OR REPLACE PROCEDURE PR_get_order_num(o_order_num OUT char)
     IS
     BEGIN
    --顺便说下,你的SQL语句里多了个")",下面的是对的
     SELECT TO_CHAR(SYSDATE,'YYYYMMDD')||LPAD(TO_CHAR(seq_order_num.nextval),7,'0') into o_order_num from dual;
     END;
      

  5.   

    好了,谢谢,顺便问下,为什么这里一定要写成o_order_num OUT char 而不能手动指定其长度
      

  6.   


    CREATE OR REPLACE PROCEDURE PR_get_order_num(o_order_num OUT varchar2)
    IS
    BEGIN
      SELECT (TO_CHAR(SYSDATE,'YYYYMMDD')||LPAD(TO_CHAR(seq_order_num.nextval),7,'0')) into o_order_num from dual;
    dbms_output.put_line(o_order_num);
    END;--过程里面的参数不能允许带长度的