Попытка выполнить простую хранимую процедуру. Помогите! Не могу найти ответ, который работает здесь

Я совершенно новичок в SQL и пытаюсь выполнить хранимую процедуру, которую даже не уверен, что написал правильно. Предполагается, что он выдает общее количество пациентов для данного доктора, и это хранимая процедура, которую мне удалось скомпилировать в Oracle SQL Developer:

CREATE PROCEDURE Totalptcount
    (drid IN INTEGER,
     totalpts OUT INTEGER)
IS
BEGIN
    SELECT COUNT(pts) AS totalpts
    INTO totalpts
    FROM ptlist
    WHERE drid = '1';
END Totalptcount;

Я пытаюсь ввести значение «1» и получить общее количество точек (количество строк) для доктора с идентификатором «1».

Как мне это выполнить? Большое спасибо заранее

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

var totalpts NUMBER
EXEC totalptcount (:totalpts);
SELECT totalpts; 
- This gave the INTO clause requirement error

BEGIN
    Exec totalptcount
END; 
- I don't really know what I'm doing and just tried this

BEGIN
    Exec totalptcount('1')
END;
- Trying to input value '1' to get out the count
- Unknown command error

Заранее спасибо!

Exec — это команда SQL*\Plus, которую нельзя использовать в блоке PL/SQL. Процедуру Totalptcount необходимо вызывать с обоими аргументами, один из которых должен быть переменной. Любой отдельный оператор внутри блока PL/SQL должен заканчиваться точкой с запятой. До версии 23 оператор SELECT должен иметь предложение FROM, например SELECT * FROM DUAL;. Возможно, вам захочется просмотреть руководство, чтобы получить дополнительную помощь по началу работы. Stack Overflow, скорее всего, не то место, которое поможет вам начать работу над этим проектом.
Jon Heller 08.06.2024 22:34
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
67
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

After your compile it, go into the connections window.
Open the schema.
One of the folders there should be for procedures.
Find your procedure and open it..
You should see a tool which is a green triangle.
Click that and it will open a dialog that can be used to run your procedure.

Вы можете найти кое-что для чтения на https://www.thatjeffsmith.com/ это может помочь сократить время вашего обучения.

Я предлагаю вам переименовать параметр drid в input_drid и использовать его для замены жестко запрограммированной цифры «1» в вашем запросе. Таким образом, вы можете выбрать любой идентификатор доктора, какой захотите.

Спасибо!! Я проверю этот сайт и спасибо за совет о его переименовании и указания о том, как найти это диалоговое окно. Я видел несколько скриншотов с ним, но понятия не имел, как туда добраться. Я также не знал, как заставить его работать с любым идентификатором Dr, так что большое спасибо!

canvaschampignon 08.06.2024 22:52
Ответ принят как подходящий

Вызов хранимой процедуры (называемой модулем PL/SQL) выполняется внутри другого блока PL/SQL. Однако у SQL*Plus есть ярлык, EXEC который просто оборачивает команду в оболочку PL/SQL BEGIN .... END;. Вы можете получить значение в переменную связывания или локальную переменную PL/SQL и вывести его на дисплей различными способами:

В SQL*Plus:

var totalpts NUMBER

EXEC Totalptcount(1,:totalpts);

print totalpts

Или

var totalpts NUMBER

BEGIN
  Totalptcount(1,:totalpts);
END;

print totalpts

Или:

set serveroutput on;

DECLARE
  totalpts number;
BEGIN
  Totalptcount(1,totalpts);
  dbms_output.put_line(totalpts);
END;

Или даже:

var totalpts NUMBER

DECLARE
  totalpts number;
BEGIN
  Totalptcount(1,var_totalpts);
  :totalpts  := var_totalpts;
END;

print totalpts

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

Однако имейте в виду, что для большинства основных потребностей SQL вам вообще не нужны процедуры. Просто напишите SQL, который получит нужный вам результат, и выполните его напрямую. Мы используем PL/SQL, когда у нас есть более сложные потребности, требующие полного программного управления потоком данных, которое SQL сам по себе не обеспечивает.

Спасибо!! Как за предложения, так и за другую информацию. Мне определенно нужно больше читать. Я сделал это, чтобы просто узнать о процедурах в целом, но вполне логично, что его не будут использовать для таких простых задач. Я действительно ценю твою помощь!

canvaschampignon 08.06.2024 22:50

Другие вопросы по теме