【问题标题】:PL/SQL Variable parameters in procedurePL/SQL 过程中的变量参数
【发布时间】:2018-04-20 09:57:29
【问题描述】:

我需要创建一个程序,允许用户输入订单信息(如下所示),以及 n 个子订单(其中 2 ≤ n ≥ 10)。我如何能够将其纳入我已有的程序中?我正在使用 SQLPlus。任何帮助或建议将不胜感激。 :)

CREATE OR REPLACE PROCEDURE VIEW_ORDER(ORDERS IN CHAR)
AS

CURSOR ORDER_CUR IS

  SELECT * FROM SUBORDERS
  WHERE ORDER_NO = ORDERS;

BEGIN
    FOR O_REC IN ORDER_CUR
    LOOP

  DBMS_OUTPUT.PUT_LINE('Product Code: ' || O_REC.prod_id 
  || ' Order: ' || O_REC.order_no 
  || ' Suborder: ' || O_REC.suborder_no
  || ' Quantity: ' || O_REC.quantity);
  END LOOP;

EXCEPTION
WHEN no_data_found THEN 
DBMS_OUTPUT.PUT_LINE ('Product number does not exist'); 
WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE ('Operation failed  ' || 'SQLCODE: ' || SQLCODE); 
ROLLBACK;
END; 
/

【问题讨论】:

  • 编写一个匿名块并检查其中 n 的验证,然后在其中调用您的现有过程。
  • 您不能在 where 中进行双重比较。您必须使用and 进行操作。像这样:where 2<=n and n<=10

标签: sql plsql sqlplus


【解决方案1】:

您可以使用输入 sqlplus 命令ACCEPT 并进行另一个循环以获取 n 个子订单。

如果我没有误解你的问题,它会是这样的:

-- You have to create the input outside the procedure
accept n char prompt 'Please enter n suborders: '

CREATE OR REPLACE PROCEDURE VIEW_ORDER(ORDERS IN CHAR)
AS

  CURSOR ORDER_CUR IS

    SELECT * FROM SUBORDERS
    WHERE ORDER_NO = ORDERS;

BEGIN
  FOR O_REC IN ORDER_CUR
  LOOP

    -- Here we check if n<=2
    IF n>=2 THEN

      -- here if n<=10
      WHILE n<=10
      LOOP
       DBMS_OUTPUT.PUT_LINE('Product Code: ' || O_REC.prod_id 
        || ' Order: ' || O_REC.order_no 
        || ' Suborder: ' || O_REC.suborder_no
        || ' Quantity: ' || O_REC.quantity);
      END LOOP;
     END IF;
    END LOOP;


EXCEPTION
WHEN no_data_found THEN 
  DBMS_OUTPUT.PUT_LINE ('Product number does not exist'); 
  WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE ('Operation failed  ' || 'SQLCODE: ' 
  || 
  SQLCODE); 
  ROLLBACK;
END; 
/

【讨论】:

    猜你喜欢
    • 2011-09-04
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 2021-07-03
    • 2018-11-30
    • 1970-01-01
    相关资源
    最近更新 更多