0

我在工作中使用存储过程时遇到问题。

它是一个存储过程,由几个更大的过程使用。完成工作的过程被称为C,调用它的过程是AB

我遇到的问题是,当我跑步时A,一切都很顺利,但是当我跑步时B,我得到了一个missing expression error,当我打电话时我没有得到A,甚至很难B并且A有相同的过程调用流程(所以,这是一种真的很奇怪的错误)。

C过程具有相同的代码:

procedure C ( LO in varchar2,
              EN in varchar2,
              CA in array1d,
              IA in number,
              AR in array2d )
is
  CQ varchar2(5);
  ET varchar2(2000);
  OL varchar2(100);
  NE varchar2(100);
  TE varchar2(100);
  XU varchar2(100);
begin
  LO := '05';
  TE := 'VAR';
  CQ := '''';
  OL := CQ || LO || CQ;
  TE := CQ || TE || CQ;
  NE := CQ || EN || CQ;

  ET := 'PAR1 = ' || CA(1) || ',' ||
        'PAR2 = ' || CA(2) || ',' ||
        'PAR3 = ' || CA(3) || ',' ||
        'PAR4 = ' || CA(4) || ',' ||
        'PAR5 = ' || CA(5) || ',' ||
        'PAR6 = ' || CA(6) || ',' ||
        'PAR7 = ' || CA(7) || ',' ||
        'PAR8 = ' || CA(8) || ',' ||
        'PAR9 = ' || CA(9);

  execute immediate 'update table_st set ' || ET || '
                      where field1 = ' || OL || '
                        AND field2 = ' || NE || '
                        AND field3 = ' || TE;
end;

我得到的错误是missing expression,它似乎出现在execute immediate. 经过一些分析,我意识到 2d ARRAY 中的数据是用一些空字符串初始化的''

我想知道您是否可以帮助我从新的角度看待这个错误,因为在我看来,似乎没有语法错误来证明missing expression error我得到的正确性,但我知道我可能错了。如果需要更多详细信息,请告诉我。

4

1 回答 1

0

至少,我会说变量 LO、CQ 尚未声明,并且 EN 和 CA 尚未声明或初始化。

另外,verchar2当我认为您的意思是. 时,您将 NE 声明为varchar2

我也同意 Juan 的观察,您可能需要仔细检查这一行:

CQ  := q'[']';

你的意思:

CQ  := q'['']';

老实说,不确定,但值得一看。

Oracle 应该告诉您该过程是否可以编译,我认为仅这些错误就会阻止它这样做。如果您从未声明 EN 和 CA 的内容,它可能仍会编译但在运行时会失败。

于 2015-10-30T21:25:18.587 回答