我有以下存储过程:
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;
/
而不是打印输出,它会产生错误。
答案 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;