我试图在Pl / Sql中创建一个过程,我收到了这个错误

时间:2018-05-16 19:31:11

标签: oracle plsql

https://imgur.com/a/ll59wjx - 图片

我试图计算当前的产品库存。 我有product_reception表,我可以在其中计算我的库存。 和销售(vanzari)表。

1 个答案:

答案 0 :(得分:2)

将代码作为图片发布通常是一个坏主意。

无论如何:反对意见:

  • 不要将程序(或表,列,...)名称括在双引号中
  • 命名参数,使其名称与列名不同,例如:不是cod_pds in number,而是par_cod_pds in number
  • 声明部分中声明变量,该变量位于isbegin之间。不要使用var(密钥)字。命名它们是个好主意,以便名称反映这些是局部变量的事实,例如l_stoc_pds number
  • 不要在PL / SQL过程中使用exec,尤其不要运行select语句。 SQL * Plus中使用exec来运行PL / SQL过程,例如exec calculstoclazi
  • 不要select into以冒号开头的变量,而只是命名变量
  • 这两个select语句完全相同;这样做我不知道你打算做什么。此外,你在cod_pds之前加stoc_pds这是一个变量名(这是完全错误的);如果列名前面有某个东西,那就是表名(或其别名)

因此,可能看起来像有效的代码是这样的;显然,结果将是0(零)。正如我告诉你的那样,这两个selects完全一样。

create or replace procedure calculstoclazi
  (par_cod_pds  in  number,
   par_rezultat out number
  )
is
  l_stocs_pds     number;
  l_total_vanzare number;
begin
  select sum(cantitate) 
    into l_stoc_pds
    from receptie_marfa
    where cod_pds = par_cod_pds;

  select sum(cantitate) 
    into l_total_vanzare
    from receptie_marfa
    where cod_pds = par_cod_pds;

  par_rezultat := l_stoc_pds - l_total_vanzare;
end;