Oracle存储过程的输出

时间:2012-09-30 07:36:28

标签: stored-procedures plsql oracle11g

我有以下存储过程:

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; 
/ 

而不是打印输出,它会产生错误。

1 个答案:

答案 0 :(得分: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;