PLS-00201: 必须声明标识符 'COL1.POTO'

PLS-00201: identifier 'COL1.POTO' must be declared

嗨,我有变量问题:

这是我的代码

CREATE OR REPLACE Procedure WstawPotomka(  wPesel IN    Osoba.Pesel%TYPE, wImie IN Osoba.Imie%Type ,
wNazwisko IN    Osoba.Nazwisko%TYPE,  wDataUr IN Osoba.Data_Urodzenia%Type,    wMiejsceUr IN Osoba.Miejsce_Urodzenia%Type, PeselMatka IN    Osoba.Matka%Type, PeselOjciec IN Osoba.Ojciec%Type) 
AS Cursor Potomek    
IS SELECT 
o.pesel as Col1, b.pesel AS Col2, c.pesel AS Col3 FROM    OSOBA o 
CROSS JOIN Osoba b 
CROSS JOIN Osoba c; 
poto Potomek%ROWTYPE;    
BEGIN 
OPEN Potomek; 
LOOP 
FETCH Potomek INTO poto; 
EXIT WHEN    Potomek%NotFound; 
IF Col1.poto != wPesel THEN    
IF COL2.poto = PeselMatka and COL3.poto = PeselOjciec THEN 
INSERT INTO Osoba Values (wPesel, wImie, wNazwisko, wDataUr, wMiejsceUr,    null, PeselMatka, PeselOjciec, null); 
END IF; 
END IF; 
END LOOP; 
Close Potomek; 
END; 

大荞麦 table:

这是我的第一个post所以不要为格式化而生气。

这可以通过一个高效的 SQL 语句来完成。

我非常怀疑您代码中的 SELET 语句和一般逻辑是否正确。 CROSS JOIN 创建了一个笛卡尔积并且总是令人怀疑。但更糟糕的是:插入的行仅从输入参数中获取数据,因此都是相同的。 SELECT 语句只确定行数。

CREATE OR REPLACE PROCEDURE WstawPotomka(
    wPesel      IN  Osoba.Pesel%TYPE,
    wImie       IN  Osoba.Imie%TYPE ,
    wNazwisko   IN  Osoba.Nazwisko%TYPE, 
    wDataUr     IN  Osoba.Data_Urodzenia%TYPE,
    wMiejsceUr  IN  Osoba.Miejsce_Urodzenia%TYPE,
    PeselMatka  IN  Osoba.Matka%TYPE,
    PeselOjciec IN  Osoba.Ojciec%TYPE
) 
AS
BEGIN
    INSERT INTO Osoba
    SELECT wPesel, wImie, wNazwisko, wDataUr, wMiejsceUr, NULL, PeselMatka, PeselOjciec, NULL
    FROM    OSOBA o 
    CROSS JOIN Osoba b 
    CROSS JOIN Osoba c
    WHERE o.pesel <> wPesel
      AND b.pesel = PeselMatka
      AND c.pesel = PeselOjciec;
END;