2

我有以下存储过程:

create or replace PROCEDURE A2CountSkus
(v_count out Number )
AS
 BEGIN 
   SELECT count(*)
      INTO v_count
      FROM a2sku;
   EXCEPTION 
 When Others THEN
    RAISE;
END A2CountSkus;

当我运行这个脚本时。

SET SERVEROUTPUT ON 
BEGIN 
DBMS_OUTPUT.PUT_LINE('SKU COUNT ' || A2CountSkus); 
END; 
/ 

它没有打印输出,而是给出了错误。

4

1 回答 1

3

首先,通常,如果您有一个命名的 PL/SQL 块,其唯一目的是返回一个值,您将声明一个函数而不是一个过程。如果您已声明A2CountSkus为返回数字的函数,则您要使用的语法将起作用。

其次,您不想要那个异常子句——它没有任何用处。它应该被淘汰。

第三,如果您确实希望块是一个过程,调用者需要声明一个可以传递给过程的局部变量,然后打印局部变量中的值。

如果你想声明一个函数

create or replace FUNCTION A2CountSkus
  return integer
AS
  l_count integer;
BEGIN 
  SELECT count(*)
    INTO l_count
    FROM a2sku;
  RETURN l_count;
END A2CountSkus;

如果您确定要声明一个过程,则调用者需要类似于

DECLARE
  l_count integer;
BEGIN 
  A2CountSkus( l_count );
  DBMS_OUTPUT.PUT_LINE('SKU COUNT ' || l_count); 
END; 
于 2012-09-30T07:49:21.877 回答