如何使此功能在 Oracle 11G 中运行 - PL/SQL

How to get this function to work in Oracle 11G - PL/SQL

我是 PL/SQL 的新手,我有一个任务需要创建一个函数。赋值如下:

> "Create a function 'afdeling_van:'
> - this function accepts a medewerkernummer(employee number) as argument
> - give the afdelingnummer(department number) from the medewerkernummer(employee number) back"

所以我需要创建一个函数,其参数是 return 一个数字。之后我可能需要添加一些代码以使其 return 返回 medewerker(员工)号码。

因为我对 PL/SQL 真的很陌生,所以我对这个很感兴趣。我目前拥有的是:

declare
 procedure afdeling_van(p_persoon in medewerkers.mnr%type)--table name with column name
 is
 begin
  select med.mnr
  from medewerkers med;
  where mnr = p_persoon;
 end afdeling_van;
begin
afdeling_van(10);
end;

它对我不起作用。我尝试了不同的解决方案。但由于我缺乏经验,我无法在网上找到我需要的解决方案或信息。我想在这里问一下

还有一件事。我认为这与我的问题类似。在之前的作业中,我创建了一个过程而不是一个函数。程序如下:

declare
v_medewerker varchar2(50) := ontsla_med();
 procedure ontsla_med(p_medewerkers in medewerkers.naam%type)
 is 
 begin
  delete from medewerkers
  where naam = p_medewerkers;
 end ontsla_med;
begin
ontsla_med('');
dbms_output.put_line('Medewerker: ' || v_medewerker || 'verwijdert uit medewerker, inschrijven en uitvoeringen bestand.' );
 exception
  when no_data_found then
  dbms_output.put_line('Medewerker bestaat niet/ is al verwijderd.');
end;
/

除最后一个 dbms_output.put_line 外,此方法有效。如果我删除输出线,那么它会工作,而对于输出线,它不会。

希望我的问题不要太含糊。

提前致谢。

您需要创建一个函数而不是一个过程,并且您在错误的位置使用了分号。尝试类似的东西:

declare
  nReturned_value  MEDEWERKERS.AFDELINGNUMMER%TYPE;

  FUNCTION afdeling_van(p_persoon in medewerkers.mnr%type) --table name with column name
      RETURN MEDEWERKERS.AFDELINGNUMMER%TYPE
  is
    nAFDELINGNUMMER  MEDEWERKERS.AFDELINGNUMMER%TYPE;
  begin
    select med.AFDELINGNUMMER
      INTO nAFDELINGNUMMER  
      from medewerkers med
      where mnr = p_persoon;

    RETURN nAFDELINGNUMMER  ;
  end afdeling_van;

begin
  nReturned_value := afdeling_van(10);
  DBMS_OUTPUT.PUT_LINE('nReturned_value = ' || nReturned_value);
end;

编辑

在您的第二个示例中,我认为 v_medewerker varchar2(50) := ontsla_med(); 行不会编译。 ontsla_med 是一个过程而不是一个函数,并且因为过程不 return 任何它们不能在赋值语句中使用的东西。

但是,v_medewerker 仅在 DBMS_OUTPUT 行中使用,您说这会导致问题 - 因此,编译器可能正在消除该变量,因为如果 DBMS_OUTPUT 行被删除,从而消除了问题。尝试将声明更改为 v_medwerker varchar2(50) := 'Hello';,看看是否有帮助。