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 回答