#plsql
#plsql
Вопрос:
CREATE PROCEDURE book_check(book_Id varchar(64))
begin
declare book_available varchar(64);
select book_id into book_available
from book_copies
where No_of_Copies >0 and book_id=book_Id;
if(book_Id in book_available ) then
select concat ("Book available");
else
select concat ("Book not available");
end if;
end
//
что я могу написать вместо ‘in’ . Я знаю синтаксис, который я ошибаюсь.
Комментарии:
1. Что именно вы пытаетесь сделать?
2. Равнина
select into
предназначена только для одного значения. Если вы хотите захватить несколько значений за один снимок, вам нужно будет определить массив и использоватьbulk collect
предложение. Очевидно, что если вы хотите проверить наличие, вы можете сделать это, не считывая ничего в память.
Ответ №1:
Это просто — попробуйте что-то вроде этого:
create or replace function book_check(book_id varchar) return varchar as
begin
for r in (select 1 from book_copies where no_of_copies > 0 and book_id = book_check.book_id) loop
return 'Book available';
end loop;
return 'Book not available';
end book_check;
/
Ответ №2:
Мне непонятно, что вы пытаетесь сделать. Я предполагаю, что вы хотите узнать, доступна ли книга или нет, и вернуть эту информацию вызывающей функции.
Ваше объявление заголовка процедуры и переменных неверно.
- Параметры процедуры или функции не определены с длиной для типа данных.
- Внутри процедуры или функции, которые вам не нужны
declare
- вы не можете получить
select
инструкцию, не поместив результат куда-нибудь. * Присвоение постоянного значения переменной выполняется с помощью:=
- Если вы хотите вернуть информацию вызывающей стороне, используйте функцию, а не процедуру
- Вы не должны присваивать переменным или параметрам то же имя, что и столбцу. Общепринятым соглашением об именовании в мире Oracle является присвоение параметрам префикса
p_
, а локальным переменным — префиксаl_
, но все, что позволяет избежать столкновения имен между именами столбцов и переменными, в порядке — просто будьте последовательны.
CREATE function book_check(p_book_id varchar)
return varchar
as
l_count integer;
l_result varchar(20);
begin
select count(*)
into l_count
from book_copies
where No_of_Copies > 0
and book_id = p_book_id;
if l_count > 0 then
l_result := 'Book available';
else
l_result := "Book not available";
end if;
return result;
end;
/
Вам действительно следует потратить время и прочитать справочник по языку PL / SQL. Там объясняется все вышесказанное.