我正在做大学作业,要求我创建一个PLSQL程序,用户可以在其中添加包含多个项目和每个项目数量的新客户订单.我想出了以下内容,要求用户输入一些要添加到订单中的项目,然后使用循环来询问特定的详细信息,例如产品编号和数量.我在运行时遇到用户输入问题...在编译代码时,它会询问产品代码和数量,并且不会在运行时再次询问它而是保存先前在编译时给出的值...
CREATE OR REPLACE
PROCEDURE Add_Order (Item_amount IN NUMBER, CustNo IN NUMBER) AS
ItemNo NUMBER;
var_Quantity NUMBER;
var_PONo NUMBER;
BEGIN
IF Item_amount BETWEEN 2 AND 9 THEN
SELECT seq_PONo.NEXTVAL INTO var_PONo from dual;
INSERT INTO PurchaseOrder_tab
SELECT var_PONo, REF(C),
SYSDATE,
ItemList_tab()
FROM Customer_tab C
WHERE C.CustNo = CustNo;
FOR i IN 1..Item_amount LOOP
DBMS_OUTPUT.PUT_LINE('INSIDE LOOP');
ItemNo := &Enter_ProdCode;
var_Quantity := &Quantity_Amount;
INSERT INTO TABLE (
SELECT P.ItemList
FROM PurchaseOrder_tab P
WHERE P.PONo = var_PONo
)
SELECT seq_ItemNo.nextval, REF(Pr), var_Quantity
FROM Products_tab Pr
WHERE Pr.ProductCode = ItemNo ;
DBMS_OUTPUT.PUT_LINE('Added '||var_Quantity ||' items of '||ItemNo||' to order No: '||var_PONo);
END LOOP;
ELSE
DBMS_OUTPUT.PUT_LINE('Amount of items entered onto an order must be between 2 - 9. Please try again with correct amount.');
END IF;
EXCEPTION
WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Operation failed '||'SQLCODE: '||SQLCODE);
DBMS_OUTPUT.PUT_LINE('SQL Error Message '||SQLERRM);
ROLLBACK;
END;
/
Run Code Online (Sandbox Code Playgroud)
简短的回答:你做不到.PL/SQL在数据库引擎内执行,数据库引擎无法访问您用于启动该过程的终端窗口(或数据库工具).
你的问题中的代码似乎部分工作,因为它要求输入一次,但实际发生的是:工具(SQL*Plus,SQL Developer或其他)解析PL/SQL块并看到&-Signs,所以它询问用什么来代替它们.一旦给出输入,PL/SQL块 - 包括输入的值 - 被提供给数据库以供执行.
由于您无法在PL/SQL中执行此操作,因此最好先创建一个收集值的前端程序,然后将它们发送到数据库.
| 归档时间: |
|
| 查看次数: |
32160 次 |
| 最近记录: |