sql >> Databasteknik >  >> RDS >> Oracle

fel antal eller typer av argument i anrop till P_AA

Din procedur definierar parametern så här:

serv in t45

Alltså t45 är den definierade datatypen för parametern.

När du nu anropar proceduren skickar du in en variabel v . Och hur är v definieras?

type t1 is table of number;
...
v t1;

t1 är en annan typ än t45 . Även om de har identiska strukturer är de olika typer . Och det är därför du får PLS-00306. Lösningen är ganska enkel:definiera v som t45 .

Du måste initiera samlingen. Du gör detta med standardkonstruktorn av typen, antingen i början av programmet ...

v := t45();

... eller när du deklarerar det:

v t45 := t45();

När du väl kommit utöver det kommer du att upptäcka att din tilldelningslogik är fel:du hämtar in i ett element i samlingen innan du ökar räknaren eller utökar arrayen. Så vad du behöver är detta:

declare
  cursor c1 is select serv_item_id from serv_item;
    n number:=0;
    v t45 := t45();
    x number;
begin
  open c1;
  loop
    fetch c1 into x;
    exit when c1%notfound;
    n:=n+1;
    v.extend();
    v(n) := x;
  end loop;
  close c1;
  p_aa(v);
end;
/ 

Alternativt kan du använda den mindre omfattande bulk-insamlingen, som hanterar all looping och typhantering implicit:

declare
    v t45;
begin
  select serv_item_id 
  bulk collect into v
  from serv_item;
  p_aa(v);
end;
/

Här är en db<>fioldemo visar att båda metoderna fungerar.




  1. Hur extraherar man repeterbara json-nodvärden separat från XML med ORACLE SQL?

  2. Mysql 8 fjärråtkomst

  3. Tar bort oönskat tecken från kolumnen

  4. FEL 1878 (HY000):Tillfälligt filskrivfel