Как вы вызываете процедуру и получаете ее переменные в pl/sql

Поэтому я пытаюсь создать игру в блэкджек в plsql, я планирую использовать 2 процедуры, которые дадут мне такие значения, как king of spade, 2 of hearts и т. д. Основная часть - это проблема, при которой я создаю петли и тому подобное. НЕ МОГУ ЗВОНИТЬ ПРОЦЕДУРУ.

Я попытался вызвать его, и sqlplus выдает мне сообщение о том, что 'имя_процесса' не является процедурой или не определено, что полностью bs.., потому что я создал его, и он находится в схеме, поэтому я должен иметь возможность использовать его, вероятно, это просто я я называю это неправильно или что-то.

также, если я хочу, чтобы значения переменных в процедуре, такие как x=1, и я хотел, чтобы значение x было в моем главном драйвере, как я это называю? какие-либо изменения в процедуре и как я могу получить его от основного?

это мой главный

    DECLARE
    draw integer;
    face varchar2(10);
    BEGIN
    draw;
    END;

я хочу вызвать draw, и я хочу, чтобы значения integer и face внутри моей процедуры были

    create or replace procedure draw is

draw integer;
face varchar2(10);

    BEGIN
select dbms_random.value(1,13) into draw from dual;


if draw = 11 then
draw := 10;
face := 'Jack';
dbms_output.put_line(face|| ' of ');


elsif draw = 12 then
draw := 10;
face := 'Queen';
dbms_output.put_line(face|| ' of ');


elsif draw = 13 then
draw := 10;
face := 'King';
dbms_output.put_line(face|| ' of ');

elsif draw = 1 then
face := 'Ace';
dbms_output.put_line(face|| ' of ');

else
dbms_output.put_line(draw|| ' of ');

end if;
    END;

заранее спасибо умные люди ака опытные программисты!

1 ответ

Новичок,

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

DECLARE
    draw integer;
    face varchar2(10);
BEGIN
   drawCard( draw, face);
   dbms_output.put_line('In main Proc ' || face|| ' of ');
END;

create or replace procedure drawCard (draw in out integer, face in out varchar2) is

BEGIN
  select dbms_random.value(1,13) into draw from dual;


  if draw = 11 then
    draw := 10;
    face := 'Jack';
    dbms_output.put_line(face|| ' of ');


  elsif draw = 12 then
    draw := 10;
    face := 'Queen';
    dbms_output.put_line(face|| ' of ');

  elsif draw = 13 then
    draw := 10;
    face := 'King';
    dbms_output.put_line(face|| ' of ');

  elsif draw = 1 then
    face := 'Ace';
    dbms_output.put_line(face|| ' of ');

  else
    dbms_output.put_line(draw|| ' of ');

  end if;
END;
Другие вопросы по тегам