Oracle ORA-01008:数据库升级后未绑定所有变量

Oracle ORA-01008:数据库升级后未绑定所有变量,oracle,plsql,oracle11g,Oracle,Plsql,Oracle11g,我遇到了一个Oracle错误(ORA-01008):问题是这个错误第一次出现,没有修改表/模式(但数据库升级)。 我尝试立即执行,但仍然得到相同的错误 SET serveroutput ON; set define off; --alter session set "_subquery_pruning_enabled"=false; DECLARE z_value NUMBER := -1; CURSOR listedocument IS select to_numb

我遇到了一个Oracle错误(ORA-01008):问题是这个错误第一次出现,没有修改表/模式(但数据库升级)。 我尝试立即执行,但仍然得到相同的错误

SET serveroutput ON;
set define off;
--alter session set "_subquery_pruning_enabled"=false; 
DECLARE
  z_value NUMBER      := -1;
  CURSOR listedocument
  IS
  select to_number(2310458) as coco from dual;
BEGIN
  FOR l IN listedocument
  LOOP
    BEGIN
          dbms_output.put_line (' l.coco= ' ||  l.coco );
         SELECT oa.myvalue
           INTO z_value
           FROM    schema2.table2 oa
                INNER JOIN
                   schema1.table1 ed
                ON ed.coco = oa.coco
          WHERE ed.coco =  l.coco
         ;
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
      dbms_output.put_line ('NO_DATA_FOUND');
    WHEN OTHERS THEN
      dbms_output.put_line ('Exception de traitement ' || SQLERRM);
    END;
  END LOOP;
END; 
问题似乎在这里
其中ed.coco=l.coco
我得到错误:异常处理ORA-01008:未绑定所有变量[=>修改后消息]

我得到错误:ORA-01008:并非所有变量都绑定

当我使用
alter session set“\u subquery\u pruning\u enabled”=false一切正常,但性能很差

我正在使用Oracle数据库11g(11.2.0.4.0)


当光标中有1个变量时使用循环。。。这不是个好主意。

看起来你可能遇到了一个bug。 看一看:

在某些情况下,优化器调用kkpap进行分区
在编译时进行修剪。有时分区修剪是通过
对表运行子查询。如果绑定变量值为
如果需要运行这些子查询,则无法在
编译时。 bug 14458214的修复修复了子查询用于分区级修剪的情况下的此问题。然而,它是
我们可能在分区级别使用其他方法,然后使用 子分区级别的子查询修剪;该病例并非
由14458214的修复程序解决


我假设你说的是“ORA-01008:并非所有变量都有界”。请不要通过将法语翻译成英语来编造新的错误消息-将ORA-01008放入您喜爱的搜索引擎将返回正确的英语术语。另外,我很感兴趣的是,您是从哪里想到使用非文档化的“\u subquery\u prunning\u enabled”参数的?这是从Metalink获取的吗?在这种情况下,我看不到使用任何绑定变量。!!!能否尝试禁用动态采样并重试。我想这可能会有帮助。alter session set optimizer\u dynamic\u sampling=0看起来您可能需要向Oracle提出服务请求。@FrankSchmitt:没错,我更正了我的原始消息。这并不能回答问题。此外,使用循环在1(或0)行上迭代也很好(尽管很少需要)。但实际上,光标会得到不止一个值。确切地说,这就是我找到的
\u子查询\u修剪\u启用的解决方案。但这似乎会降低性能。另一个解决方案是对ed.coco应用
to_number
类似于
to_number(ed.coco)=l.coco
,但性能很差,我无法解释原始问题。如果您可以访问oracle支持,您应该安装修补程序(如果可用)或与他们联系IMHONo我没有,我也不是DBA。但我做了一些测试:首先,我的请求在其他环境上工作。然后
schema2.table2
是一个具体化的视图,基于一个DBLINK,我使用了另一个具体化的视图(基于相同的DBLINK),它使用相同的约束(oa.coco)。在我用
table2@DBLINK
,它就可以工作了。因此,我认为具体的视图物化存在问题,但我不擅长确定它是什么(分区等)……好的,看来您有一个不可用的索引,而查询正在尝试使用它。也许你应该看看谁的索引是不可用的,并尝试在另一个索引上使用索引提示来避免它(如果可能的话)。确切地说,我就像他说的那样()索引是不可用的…所以我重建了它们(
alter index cds.snapshot\u pk rebuild partition p\u 13118;
),它就工作了。谢谢你的帮助。
DECLARE

  z_value NUMBER      := -1;


coco number;
BEGIN
    BEGIN
coco:=2310458;
          dbms_output.put_line (' coco= ' ||  coco );
         SELECT oa.myvalue
           INTO z_value
           FROM    schema2.table2 oa
                INNER JOIN
                   schema1.table1 ed
                ON ed.coco = oa.coco
          WHERE ed.coco =  coco
         ;
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
      dbms_output.put_line ('NO_DATA_FOUND');
    WHEN OTHERS THEN
      dbms_output.put_line ('Exception de traitement ' || SQLERRM);
    END;