程序的实际含义是什么?

问题描述 投票:0回答:1
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 stored-procedures plsql
1个回答
0
投票

根据我的说法..该过程不返回任何值,这意味着它是一个空函数。那么这应该可行。它应该打印“这是一个打印程序”。

嗯,事情不是这样的。实际上是根据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

© www.soinside.com 2019 - 2024. All rights reserved.