存储过程在找到某些东西时返回一个数字

Stored procedure returning a number when it find something

我正在尝试创建一个存储过程以在 table 中查找客户,return如果找到某样东西则为 1,如果没有找到则为 0。我有使用异常处理 0 部分的想法,但我不知道如何 return 我想要的数字。

CREATE OR REPLACE PROCEDURE FIND_CUSTOMER 
(
  CUSTOMER_ID IN NUMBER 
, FOUND OUT NUMBER 
) AS 
BEGIN
SELECT CUST_NO
FROM CUSTOMERS
WHERE CUST_NO = customer_id;

EXCEPTION 
WHEN no_data_found 
THEN found := 0; 
END FIND_CUSTOMER;

我应该把 return 语句放在哪里才能使其正常工作?提前致谢。

刚刚错过了 INTO 语句的 SELECT 子句。您可以像这样重新创建过程

CREATE OR REPLACE PROCEDURE find_customer(
                                          customer_id customer.cust_no%TYPE,
                                          found       OUT INT
                                         ) AS                                         
BEGIN
  SELECT SIGN(cust_no)
    INTO found
    FROM customer
   WHERE cust_no = customer_id;

EXCEPTION
  WHEN no_data_found THEN
    found := 0;
END;
/

或者更喜欢通过使用简单的隐式游标来像下面这样创建,其中不需要 INTO 子句和异常处理,甚至只是一个初始化值(zero) 用于输出参数如

CREATE OR REPLACE PROCEDURE find_customer(
                                          customer_id customer.cust_no%TYPE,
                                          found       OUT INT
                                         ) AS
BEGIN
  found := 0;
  FOR c IN
    (
      SELECT SIGN(cust_no) AS fnd
        FROM customer
       WHERE cust_no = customer_id
    )
  LOOP
    found := c.fnd;
  END LOOP;
END;
/

我使用 SIGN() 函数来 return 值 (1) 假设 cust_no 的所有值都是正整数逻辑上。