Как я могу исправить это представление, пока я использую процедуру для его создания? - PullRequest
0 голосов
/ 08 мая 2019

Я создаю базу данных для проекта класса, и у меня возникла проблема с ним.Я создал представление из таблицы, используя функцию для вычисления одного из столбцов (мне нужно всего две функции, но когда у меня будет эта первая скважина, я смогу сделать вторую).

ЭтоПервый код - это функция

create or replace FUNCTION homepts
RETURN NUMBER
AS
    CURSOR res IS
        SELECT result1, result2, team1, team2 FROM matches;
Pts NUMBER;
res1 NUMBER;
res2 NUMBER;
t1 matches.team1%TYPE;
t2 matches.team2%TYPE;
BEGIN
    OPEN res;
    FETCH res INTO res1,res2,t1,t2;
    WHILE res%FOUND LOOP
        IF ((res1)>(res2))then
            Pts := 3;
        ELSE
            Pts := 1;
        END IF;
        FETCH res INTO res1, res2,t1,t2;
    END LOOP;
    CLOSE res;
    RETURN Pts;
END;

Этот второй код - это представление, которое я создаю с помощью функции

CREATE OR REPLACE VIEW PRELIGA ("TEAM1", "TEAM2", "RESULT1", "RESULT2", "PTS") AS 
SELECT Team1, Team2, Result1, Result2 FROM matches;

Все создается с помощью разработки Oracle SQL.Мне нужно сохранять каждый раз, когда переменная Pts изменяется в соответствующем столбце.Я попытался использовать UPDATE VIEW внутри функции, но она выдает ошибку.Поэтому, если кто-нибудь сможет мне помочь, я буду ему очень благодарен.

1 Ответ

0 голосов
/ 08 мая 2019

возможно это то, что вам нужно:

CREATE OR REPLACE VIEW PRELIGA ("TEAM1", "TEAM2", "RESULT1", "RESULT2", "PTS") AS 
SELECT Team1, Team2, Result1, Result2, 
       case when Result1 > Result2 then 3 else 1 end as pts
FROM matches;

если вы хотите использовать функцию, то вы должны переписать ее. например

create or replace FUNCTION homepts (pi_result1 in number, pi_result2 in number)
RETURN NUMBER
AS     
BEGIN   
  RETURN case when Result1 > Result2 then 3 else 1 end;
END;

чтобы вы могли использовать его в своем представлении

CREATE OR REPLACE VIEW PRELIGA ("TEAM1", "TEAM2", "RESULT1", "RESULT2", "PTS") AS 
SELECT Team1, Team2, Result1, Result2, 
       homepts(Result1,Result2) as pts
FROM matches;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...