1

だから私はplsqlでゲームブラックジャックを作成しようとしています.スペードのキング、ハートの2などの値を与える2つの手順を使用する予定です.主な部分は、ループなどを作成する問題です.プロシージャーを呼び出すことができません。

私はそれを呼び出そうとしましたが、sqlplus は、「procedurename」はプロシージャーではないか、完全に 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;

経験豊富なプログラマーとも呼ばれるスマートな人々に事前に感謝します!

4

1 に答える 1

1

初心者、

メインプロシージャに値を戻す必要があると仮定すると、以下が機能するはずです。パラメータを in 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;
于 2014-05-08T00:08:36.853 に答える