PL / SQL过程中的变量参数

时间:2018-04-20 09:57:29

标签: sql plsql sqlplus

我需要创建一个允许用户输入订单信息的程序(如下所示),还需要输入 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; 
/

1 个答案:

答案 0 :(得分:0)

您可以使用输入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; 
/
相关问题