0
要素のリストを返すPL/SQL関数を作成したいと考えています。私の機能コレクションの更新
CREATE OR REPLACE FUNCTION genererListe(user IN INT, dateEstime IN date)
RETURN isteIngredient_tab
AS
tab_res isteIngredient_tab;
quantiteAacheter INT;
quantitePosseder INT :=0;
exist INT;
-- Cursor on recipe
CURSOR cursor_recette IS
SELECT r.* FROM Recette r
JOIN planning p
ON p.idRecette=r.idrecette
JOIN Utilisateur u
ON p.idUtilisateur=u.idUtilisateur
WHERE u.idUtilisateur=1
AND p.jour>dateEstime;
BEGIN
tab_res := isteIngredient_tab();
FOR row_recette IN cursor_recette
LOOP
--Iterate on all ingredient of a recipe
FOR result IN (SELECT i.*,ir.quantite FROM Ingredient i
JOIN IngredientRecette ir
ON ir.idIngredient=i.idIngredient
JOIN Recette r
ON r.idRecette=ir.idRecette
WHERE i.Disponibilite = 'N'
AND r.idRecette=row_recette.idrecette)
LOOP
SELECT CASE
-- Check if an ingredient is already present in the tab_res
WHEN EXISTS(select * from table(tab_res) WHERE idIngredient = result.idIngredient)
THEN 1
ELSE 0
END INTO exist
FROM dual;
--If it is not present, add a new line in tab_res
IF exist = 0 THEN
tab_res.extend;
tab_res(tab_res.count) := listeIngredient_col(result.idIngredient,
result.nom,
5,
dateEstime);
-- If it is present uprgrade quantity value
ELSE
UPDATE table(tab_res)
SET quantite=quantite+result.quantite
WHERE idIngredient = result.idIngredient;
END IF;
END LOOP;
END LOOP;
RETURN tab_res;
END;
/
問題はあるが、いつか私は結果]タブに新しい行を追加したいといつか私がしたい、
CREATE OR REPLACE TYPE listeIngredient_col AS OBJECT
(
idIngredient int,
nomIngredient varchar(25),
quantite int,
dateE date
);
/
CREATE OR REPLACE TYPE isteIngredient_tab IS TABLE OF listeIngredient_col;
/
があります:私はすでにこのような新しいタイプを作成しました結果表の特定の行を更新しますが、更新は機能しません。
UPDATE table(tab_res)
SET quantite=quantite+result.quantite
WHERE idIngredient = result.idIngredient;
エラーは次のとおりです。ORA-00903:無効な表名。
このように更新することはできますか?それとも別の解決策がありますか?更新文あちこち
'NESTED'テーブルは' UPDATE'文で更新することはできません –