本帖最后由 yang15225094594 于 2012-08-12 16:54:08 编辑

解决方案 »

  1.   

    冒号的含义是引用“宿主”的变量,你直接写在declare 下面这就是 plsql匿名块自己的变量了,当然不需要冒号你直接在sqlplus 里面[TEST@myoracle] SQL>var job number;
    然后再执行下面的sql,冒号就不用去了,因为你引用的是 “宿主” sqlplus里面定义的变量:begin
      sys.dbms_job.submit(job => :job,
                          what => 'pro_job;',
                          next_date => to_date('12-08-2012 16:48:59', 'dd-mm-yyyy hh24:mi:ss'),
                          interval => 'sysdate+1/24');
      commit;
    end;
    /
      

  2.   

    直接输入JOB号就可以了,为什么还用变量,实现方式都一样,传入个JOB号
      

  3.   

    我上网搜了一下,发现“宿主”就是指SQL语句嵌入到的应用程序,“宿主变量”就是在该应用程序中定义的变量。你说“宿主” sqlplus ,恩,sqlplus也算宿主?
    我按照你说的方式,通过var关键字定义了一个变量,然后执行上面的那个定义定时任务的语句,发现真的不用去掉“:”了。而且通过下面的语句前后两次的查询,如下:SQL> select :job from dual;我看到了定义定时任务之后,会把定时任务的job号放到定义的var变量job中,所以开始没有值,后来有值。后来我就想,既然sqlplus就是宿主,那么我应该可以把变量赋给定义的宿主变量啊?于是我使用下面的语句:SQL> select count(*) into :job from scott.emp;select count(*) into :job from scott.empORA-01036: 非法的变量名/编号
    job
    ---------
    怎么又不可以传值了呢?这个不怎么清楚,谢谢!(*^◎^*)
      

  4.   

    我感觉这是一个不错的方式,因为这样就可以自动定义job号,但是通过上面的“宿主变量”,我看到了在定义定时任务的时候,实际上自动产出了一个按顺序的job号,但我自定义一个job号的时候,出现了问题,如下:begin
      sys.dbms_job.submit(job => 86,
                          what => 'pro_job;',
                          next_date => to_date('12-08-2012 16:48:59', 'dd-mm-yyyy hh24:mi:ss'),
                          interval => 'sysdate+1/24');
      commit;
    end;ORA-06550: 第 2 行, 第 23 列: 
    PLS-00363: 表达式 '<expression>' 不能用作赋值目标
    ORA-06550: 第 2 行, 第 3 列: 
    PL/SQL: Statement ignored我把自定义的job号用引号括起来还是不行,不知道是不是还有什么限制。没有直接使用过这样的方式,谢谢!
      

  5.   


    begin
      select count(*) into :job from scott.emp;
    end;
      

  6.   

    begin
      select count(*) into :job from scott.emp;
    end;
      

  7.   

    奥,原来对于这些宿主变量的赋值,需要放到PL/SQL块中啊!好的,明白,谢谢!
      

  8.   

    现在还没法加你好友,以后加上之后,麻烦你给我说一下你是怎么传递一个自定义的job号来实现创建定时任务的,谢谢啊!