解决方案 »

  1.   

    是不是你的数据库版本或是PL/SQL版本太低造成的?
      

  2.   


    在sqlplus下面是可以执行的
      

  3.   

    是不是PL/SQL中不支持这个函数啊,某些oracle的开发工具中分析函数的语法都不支持的
    看你的语法确实没啥问题
      

  4.   


    有没有什么办法能绕过去呢?实际上我的需求是这样的:
    我有一张表需要每次从中读取一条记录并且删除掉,读取的时候需要将这一条记录锁住不让其他进程读取该记录,直到delete想到的解决方案是这样的
    select pk into :pk from pool sample(10) where rownum = 1 ; --随机读到一条记录,并且将主键拿出来
    select * from into ..... pool where pk = :pk for update nowait; -- 读取并锁住记录
    delete .... where pk = :pk; -- 删除记录
    当然要判断一下1403 和如果被锁住的错误码,前两条语句有个小循环。但是第一句话预编译就报错了,有没有好的办法???
      

  5.   

    将select * from pool sample(10)建成视图,然后查询视图,应该能绕过去
      

  6.   

    试试动态语句的写法,应该能绕过
    v_Sql:='select pk from pool sample(10) where rownum = 1';
    execute immediate v_Sql into v_tmp;
      

  7.   

    已试,正在试。编译能过。
    实际上做这个事情是为了增加性能,减少锁造成的排队。改成动态SQL回不回又慢了还未知