Попробуйте ниже, проверьте мои комментарии:
CREATE OR REPLACE PACKAGE pkgVolunteer AS
PROCEDURE uspaddVolunteer(varvl_ID NUMBER,
varvl_type NUMBER,
varName VARCHAR2,
varAge NUMBER,
varGenger VARCHAR2,
varBirthDate VARCHAR2,-- here needs space
varPhone NUMBER,
varEmail VARCHAR2,
varFaculty VARCHAR2,
varCourse VARCHAR2,
varYear NUMBER,
varcountry VARCHAR2,
varCity VARCHAR2 , --> needs comma
varstreet VARCHAR2,
varPostCode VARCHAR2);
END pkgVolunteer;
/
CREATE OR REPLACE PACKAGE BODY pkgVolunteer AS
PROCEDURE uspaddVolunteer(varvl_ID NUMBER, varvl_type NUMBER, varName VARCHAR2, varAge NUMBER, varGenger VARCHAR2, varBirthDate VARCHAR2, varPhone NUMBER, varEmail VARCHAR2, varFaculty VARCHAR2, varCourse VARCHAR2, varYear NUMBER, varcountry VARCHAR2, varCity VARCHAR2, varstreet VARCHAR2, varPostCode VARCHAR2) IS
BEGIN
INSERT INTO Volunteer
(vl_id,
vl_type,
name,
age,
gender,
birth_date,
phone,
email,
faculty,
course,
year,
addr_country,
addr_city,
addr_street,
addr_postcode) VALUEs --> needs s
(varvl_ID,
varvl_type,
varName,
varAge,
varGenger,
vBirthDate,
varPhone,
varEmail,
varFaculty,
varCourse,
varYear,
varcountry,
varCity,
varstreet,
varPostCode);
END;
end; -- add another END;
/
Некоторые круглые скобки могли бы помочь:
puts (i%3 == 0) ? ((i%5 == 0) ? "FizzBuzz" : "Buzz") : ((i%5 == 0) ? "Fizz" : i)
Так, если я являюсь делимым 3, затем это проверяет, являюсь ли я также делимым 5. Если так, это печатает "FizzBuzz" иначе просто "Шум". Если я не являюсь делимым три, то это проверяет делимость 5 снова и печатает "Шипение" если так, иначе просто я.
Вот описание проблемы FizzBuzz, как указано в этой статье Jeff Atwood.
Запишите программу, которая печатает числа от 1 до 100. Но для кратных чисел трех печати "Шипение" вместо числа и для кратных чисел пяти печати "Шум". Для чисел, которые являются кратными числами и три и пять, печатают "FizzBuzz".
Тернарный оператор является краткой записью для если еще оператор. Общий формат:
cond ? evaluate_if_cond_is_true : evaluate_if_cond_is_false
Таким образом, если я пишу:
int isEven = (i % 2 == 0) ? 1 : 0;
Эквивалентно следующему коду:
if (i % 2 == 0) {
isEven = 1;
} else {
isEven = 0;
}
Где конусовидный i % 2 == 0
, evaluate_if_cond_is_true 1
и evaluate_if_cond_is_false 0
.
Хорошая вещь о тернарных операторах состоит в том, что они могут быть объединены. Это означает, что оператор для выполнения, когда любое условие оценивает к TRUE или FALSE, может быть другим тернарным оператором.
Позвольте помещает все условие в более читаемый вид:
i%3==0 ?
i%5==0 ?
"FizzBuzz"
: "Buzz"
: i%5==0 ?
"Fizz"
: i
И отображение этого к тому, если еще операторы легко с правилами, объясненными выше:
if (i%3==0) {
if (i%5==0) {
"FizzBuzz"
} else {
"Buzz"
}
} else {
if (i%5==0) {
"Fizz"
} else {
i
}
}
Это не действительный код, но потому что результат тернарного оператора встраивается в выражении результата, это используется в качестве входа для, помещает команду.
поток:
if (i%3 == 0) { // multiple of 3
if (i%5 == 0) { // multiple of 3 and 5
puts "FizzBuzz"
} else { // not multiple of 5, only of 3
puts "Buzz"
}
} else ( // not multiple of 3
if (i%5 == 0) { // multiple of 5, not of 3
puts "Fizz"
} else { // multiple of neither 5 nor 3
puts i
}
}
Троичным является основное если затем структура.
Вышеупомянутое эквивалентно...
if i%3 ==0
if i%5 == 0
"FizzBuzz"
else
"Buzz"
else
if i%5 == 0
"Fizz"
else
i
Или, использование некоторого parens...
puts i%3==0 ? ( i%5==0 ? "FizzBuzz" : "Buzz" ) : ( i%5==0 ? "Fizz" : i )
Для забавы вот иначе:
puts (1..100).map {|i| (fb = [["Fizz"][i%3],["Buzz"][i%5]].compact.join).empty? ? i : fb}
И другой:
(1..100).zip([nil,nil,"Fizz"]*34,[nil,nil,nil,nil,"Buzz"]*20).map {|a,b,c| b || c ? [b,c].join : a}