Stored procedures Oracle存储过程的输出

Stored procedures Oracle存储过程的输出,stored-procedures,plsql,oracle11g,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.

我有以下存储过程:

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

它不会打印输出,而是给出一个错误。

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

其次,您不需要那个exception子句——它没有任何用处。它应该被消除

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

如果你想声明一个函数

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; 

它会给您带来什么错误?@Mat错误从命令中的第2行开始:开始DBMS_输出。将_行('SKU计数'| |到_字符(A2COUNTSKUS());结束;错误报告:ORA-06550:第2行第46列:PLS-00306:调用“A2COUNTSKUS”时参数的数量或类型错误ORA-06550:第2行第1列:PL/SQL:语句忽略06550。00000-“行%s,列%s:\n%s”*原因:通常是PL/SQL编译错误*操作:“调用中参数的数量或类型错误”-这不告诉您出了什么问题吗?@Mat v_count是输出参数。我必须通过的内容,以便在运行第二个脚本时打印所需的输入。谢谢,这是一个外部参数。您需要传递一个参数以将值存储到中。