问题: 你的块应该读入两个实数并判断 两个数等于或大于100。在屏幕上显示输出 使用 dbms_output.put_line。 (使用 decode 而不是 IF 语句 where 必需的)。数据必须由用户输入。
我在 oracle plsql 上尝试这个并卡在这里。
代码:
CREATE OR REPLACE PROCEDURE two
AS
i number;
j number;
p number;
b boolean;
msg varchar2(100);
BEGIN
i:=&x;
j:=&y;
p:=i*j;
b:=p>=100;
select DECODE(b,1,'True','False') into msg from dual;
dbms_output.put_line(msg);
END;
错误:
LINE/COL ERROR
-------- -----------------------------------------------------------------
13/16 PLS-00382: expression is of wrong type
如果我没记错的话,你不能那样使用布尔值。但是,如果您可以将其转换为算术运算,从而得到一个整数值,那么您就得到了想要的结果。因此尝试从 p 中减去 100 并检查它是否为正数。如果它是一个正数 p 大于 100.
CREATE OR REPLACE PROCEDURE two
AS
i number;
j number;
p number;
b boolean;
msg varchar2(100);
BEGIN
i:=&x;
j:=&y;
p:=i*j;
b:=p>=100;
select DECODE(sign(p-100),1,'True','False') into msg from dual;
dbms_output.put_line(msg);
END;
你不能这样做:
select DECODE(b,1,'True','False') into msg from dual;
布尔值不是 SQL 数据类型的一部分。它是一种仅限 PL/SQL 的数据类型,因此您不能在 SELECT 语句中使用它。另外,您正在将布尔值与整数进行比较,尽管它在 Javascript 中有效,但在 SQL 中却无效。
你必须这样做:
IF b
THEN
msg := 'True';
ELSE
msg := 'False';
END IF;
或者不要使用布尔值。
您不能在过程中使用替换变量(因为它们将在过程编译时计算,而不是在过程运行时计算)。您需要为过程使用参数:
CREATE OR REPLACE PROCEDURE two(
i IN NUMBER,
j IN NUMBER
)
AS
msg varchar2(100);
BEGIN
DBMS_OUTPUT.PUT_LINE(CASE WHEN i * j >= 100 THEN 'True' ELSE 'False' END);
END;
/
然后,当您调用过程时,您可以使用替换变量:
BEGIN
DBMS_OUTPUT.ENABLE();
two(&x, &y);
END;
/