【问题标题】:Issue with PL/SQL OutputPL/SQL 输出问题
【发布时间】:2020-06-10 19:07:42
【问题描述】:

我在 Oracle SQL Developer 中创建了这个过程。

CREATE OR REPLACE PROCEDURE CUST_NAME_LIMIT(
I_CUSTOMER_NUM IN CUSTOMER.CUSTOMER_NUM%TYPE,
I_CUSTOMER_NAME OUT CUSTOMER.CUSTOMER_NAME%TYPE,
I_CREDIT_LIMIT OUT CUSTOMER.CREDIT_LIMIT%TYPE)
AS
BEGIN
SELECT CUSTOMER_NAME, CREDIT_LIMIT
INTO
I_CUSTOMER_NAME, I_CREDIT_LIMIT
FROM
CUSTOMER
WHERE
CUSTOMER_NAME = I_CUSTOMER_NAME;
DBMS_OUTPUT.PUT_LINE(I_CUSTOMER_NAME);
DBMS_OUTPUT.PUT_LINE(I_CREDIT_LIMIT);
END;

当我尝试在下面显示输出时出现错误

BEGIN
CUST_NAME_LIMIT('126');
END;

它应该输出 玩具丰富 7500

【问题讨论】:

标签: sql oracle stored-procedures


【解决方案1】:

仅当您告诉我们您遇到了哪个错误,而不是让我们猜测。但是,嘿,这样更有趣!

当您声明一个接受一个IN 和两个OUT 参数的过程时:

create or replace procedure cust_name_limit(
  i_customer_num in customer.customer_num%type,
  i_customer_name out customer.customer_name%type,
  i_credit_limit out customer.credit_limit%type)
as
begin
  select customer_name, credit_limit
  into i_customer_name, i_credit_limit
  from customer
  where customer_name = i_customer_name;
end;

调用它时也必须这样做:

declare
  l_custname customer.customer_name%type;
  l_credlim  customer.credit_limit%type;
begin
  CUST_NAME_LIMIT('126', l_custname, l_credlim);

  dbms_output.put_line(l_custname ||' - '|| l_credlim);
end;
/

在过程中显示结果没有多大意义;一旦它返回值就这样做。

【讨论】:

    猜你喜欢
    • 2018-07-08
    • 2019-09-16
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多