SQL> create or replace procedure print()
2 is
3 begin
4 dbms_output.put_line("This is a print procedure");
5 end;
6 /
Warning: Procedure created with compilation errors.
根据我的说法..该过程不返回任何值,这意味着它是一个空函数。那么这应该可行。它应该打印“这是一个打印程序”。
根据我的说法..该过程不返回任何值,这意味着它是一个空函数。那么这应该可行。它应该打印“这是一个打印程序”。
嗯,事情不是这样的。实际上是根据Oracle,因为数据库在这里设置规则,而不是你。
SQL> create or replace procedure print()
2 is
3 begin
4 dbms_output.put_line("This is a print procedure");
5 end;
6 /
Warning: Procedure created with compilation errors.
当您使用 SQL*Plus 时,查看问题的最简单方法是 显示错误:
SQL> show err
Errors for PROCEDURE PRINT:
LINE/COL ERROR
-------- -----------------------------------------------------------------
1/17 PLS-00103: Encountered the symbol ")" when expecting one of the
following:
<an identifier> <a double-quoted delimited-identifier>
current delete exists prior
SQL>
它表示您在不应该使用的地方使用了括号(第 1 行)。去掉括号后,则:
SQL> l1
1* create or replace procedure print()
SQL> c/()//
1* create or replace procedure print
SQL> l
1 create or replace procedure print
2 is
3 begin
4 dbms_output.put_line("This is a print procedure");
5* end;
SQL> /
Warning: Procedure created with compilation errors.
现在怎么了?第 4 行双引号; Oracle 中使用单引号:
SQL> show err
Errors for PROCEDURE PRINT:
LINE/COL ERROR
-------- -----------------------------------------------------------------
4/3 PL/SQL: Statement ignored
4/25 PLS-00201: identifier 'This is a print procedure' must be
declared
SQL>
让我们解决这个问题:
SQL> l4
4* dbms_output.put_line("This is a print procedure");
SQL> c/"/'/
4* dbms_output.put_line('This is a print procedure");
SQL> c/"/'/
4* dbms_output.put_line('This is a print procedure');
SQL> l
1 create or replace procedure print
2 is
3 begin
4 dbms_output.put_line('This is a print procedure');
5* end;
SQL> /
Procedure created.
SQL>
好的,现在就可以了。有效吗?首先启用输出!
SQL> set serveroutput on
SQL> exec print
This is a print procedure
PL/SQL procedure successfully completed.
SQL>
是的,它有效。
但是,我不确定您是否理解创建过程不会自动执行它。你说
它应该打印“这是一个打印程序”。
当然不应该;如果一开始一切顺利,你会得到
Procedure created.
;执行后,您会收到实际消息,This is a print procedure
。