[英]PLS-00201: identifier 'COL1.POTO' must be declared
Hi I have problem with variable:嗨,我对变量有疑问:
Here is my code这是我的代码
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;
The Osoba table:奥索巴表:
It's my first post so don't be so angry for formatting.这是我的第一篇文章,所以不要为格式化而生气。
This can be done with a single efficient SQL statement.这可以通过一个有效的 SQL 语句来完成。
I highly doubt that the SELET statement and the general logic in your code is correct.我非常怀疑代码中的 SELET 语句和一般逻辑是否正确。 CROSS JOINs create a cartesian product and are always suspect.
CROSS JOIN 创建一个笛卡尔积并且总是被怀疑的。 But even worse: The inserted rows only take data from the input parameters and thus are all the same.
但更糟糕的是:插入的行仅从输入参数中获取数据,因此都是相同的。 The SELECT statement only determines the number of rows.
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
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.