尝试在Oracle SQL中创建存储过程



我试图在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
  • 之前缺少IS关键字
  • 你需要用;
  • 终止语句
  • CHAR数据类型签名中没有长度

:

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.

最新更新