我试图在Oracle中创建一个过程。我希望能够调用一个变量输入的过程,并有一个语句读取。我在学习Oracle SQL的过程中,所以我不确定我哪里出错了。
这是我的代码:
create or replace procedure gradeCheck(grade char(1))
Begin
Case
When grade = 'A' then DBMS_OUTPUT.PUT_LINE('Great Work')
else DBMS_OUTPUT.PUT_LINE('Not great work')
end case;
end gradeCheck;
/
Begin
gradeCheck(A);
end;
/
我希望输入是'A'(分数分配),并获得文本输出。我得到一个消息,GRADECHECK
程序正在编译。但是它不允许我用输入来调用它
- 您要使用
IF
而不是CASE
- 在
BEGIN
之前缺少 - 你需要用
;
终止语句 CHAR
数据类型签名中没有长度
IS
关键字:
create procedure gradeCheck(
grade CHAR
)
IS
BEGIN
IF grade = 'A' THEN
DBMS_OUTPUT.PUT_LINE('Great Work');
ELSE
DBMS_OUTPUT.PUT_LINE('Not great work');
END IF;
END gradeCheck;
/
然后你需要用引号括住字符串:
Begin
gradeCheck('A');
end;
/
db<此处小提琴>此处小提琴>
你的问题
- 您在
create or replace
语句中缺少一个单词is
- 如果输入变量是字符串(char),那么在调用过程时必须将值括在引号中。
- 使用
varchar2
代替char
,尽管这不是强制性的。 ;
必须位于dbms_output
末尾- 如果您使用
sqlplus
运行它,使用set serveroutput on
启用输出,您可以看到消息。 然后
create or replace procedure gradeCheck(grade in varchar2)
is
Begin
case when grade = 'A'
then
DBMS_OUTPUT.PUT_LINE('Great Work');
else
DBMS_OUTPUT.PUT_LINE('Not great work');
end case;
end gradeCheck;
/
set serveroutput on
Begin
gradeCheck('A');
end;
/
测试用例
SQL> l
1 create or replace procedure gradeCheck(grade in varchar2)
2 is
3 Begin
4 case
5 when grade = 'A' then
6 DBMS_OUTPUT.PUT_LINE('Great Work');
7 else
8 DBMS_OUTPUT.PUT_LINE('Not great work');
9 end case;
10* end gradeCheck;
SQL> /
Procedure created.
SQL> begin
2 gradeCheck('A');
3 end;
4 /
PL/SQL procedure successfully completed.
SQL> set serveroutput on
SQL> r
1 begin
2 gradeCheck('A');
3* end;
Great Work
PL/SQL procedure successfully completed.