Я беру класс о базах данных. Я очень новичок в этом, поэтому извините меня, если это очевидная ошибка, но я много часов работал над этой проблемой и не уверен, что еще делать.SQL-функция и анонимный блок
код предполагают, чтобы создать функцию для того
А.) Выдает среднее NetWin за год, заданной параметром (задается формулой (SeasonW-Seasonl) + (PlayoffW - PlayoffL)
B .) Вывод всех тренеров, имеющих сеть в среднем
C.) Возвращает количество тренеров, которые соответствуют этим критериям.
D.) Имейте анонимный блок, который вызывает эту функцию, и выводит два разных сообщения в зависимости от возврата функции.
Теперь я успешно сделал часть A, C и D. Но по какой-то причине моей функция не будет создана, когда я ввожу часть B.
create or replace function GOOD_COACHES(season IN INT)
return INT
IS
netwin INT;
CNT INT;
BEGIN
--Calculated netwin
select AVG((SEASON_WIN-SEASON_LOSS) + (PLAYOFF_WIN-PLAYOFF_LOSS)) into netwin from COACHESSEASON where YEAR = season;
--Prints out A
dbms_output.put_line('Average Netwin is: ' || netwin);
--This Line messes up the function, I don't know why
select T.FIRSTNAME, T.LASTNAME from COACHESSEASON T where ((T.SEASON_WIN-T.SEASON_LOSS) + (T.PLAYOFF_WIN-T.PLAYOFF_LOSS))>netwin and YEAR = season;
--Calculates the number of teams that satisfy average
select count(T.FIRSTNAME) into CNT from COACHESSEASON T where ((T.SEASON_WIN-T.SEASON_LOSS) + (T.PLAYOFF_WIN-T.PLAYOFF_LOSS))>netwin and YEAR = season;
return CNT;
END;
--End of the Function
--Start of the Anonymous Block
DECLARE
x int := GOOD_COACHES(1998);
BEGIN
if x = 0 then dbms_output.put_line('We didn''t find any good_coaches!');
else dbms_output.put_line('The No. of good coaches is ' || x);
end if;
END;
/
Это третья строка в функции столовых его и Безразлично 'Позвольте, чтобы это было вызвано. Если я прокомментирую это, он работает правильно. Когда я выхожу из функции и превращаю ее в обычный SQL-оператор, он работает.
select T.FIRSTNAME, T.LASTNAME from COACHESSEASON T where ((T.SEASON_WIN-T.SEASON_LOSS) + (T.PLAYOFF_WIN-T.PLAYOFF_LOSS))>0 and YEAR = /*RandYear*/;
Если кто-то понимает, почему функция не может быть создана с этой строкой, я буду признателен за совет. Я также не знаю, как распечатать результаты выбранной строки в функции.
функции не являются частью SQL сам по себе, а что-нибудь g, которые приносит конкретная система управления базами данных (СУБД), и различные системы имеют тенденцию делать это по-разному, поэтому вам нужно рассказать нам, какую СУБД вы используете. – jpw
sqlplus Я верю. – user3002669
sqlplus - это не СУБД, а программа Oracle. Согласно синтаксису это Oracle. Если вы хотите, чтобы функция печатала что-то, вам нужно использовать dbms_output. Когда вы выбираете FIRSTNAME и LASTNAME, выберите их для переменных и put_line, аналогичную строке netwin – cha