存储过程在找到某些东西时返回一个数字
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
的所有值都是正整数逻辑上。
我正在尝试创建一个存储过程以在 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
的所有值都是正整数逻辑上。