【发布时间】:2015-02-06 15:13:08
【问题描述】:
我正在尝试创建一个过程,该过程接受一个参数(ID 号)并输出有关该特定项目的一些信息。假设我有两个表: 产品(id、名称、描述、价格) line_item (prod_id, total, quantity, cust_id)
这是我目前所拥有的:
CREATE OR REPLACE PROCEDURE product_query (p_id IN Number)
RETURN NUMBER
IS
v_product_id NUMBER;
v_description NUMBER;
v_sub NUMBER;
v_total_quantity NUMBER;
v_order_count NUMBER;
BEGIN
SELECT p.product_id, sum(l.subtotal), sum(l.quantity), count(*)
INTO v_product_id, v_sub, v_total_quantity, v_order_count
FROM line_item l, product p
WHERE p.product_id = p_id
AND
l.product_id = l.product_id
group by p.product_id;
DBMS_OUTPUT.PUT_LINE('ID: ' || p_product_id);
DBMS_OUTPUT.PUT_LINE('Subtotal: ' || v_sub);
DBMS_OUTPUT.PUT_LINE('Total Qt: ' || v_total_quantity);
DBMS_OUTPUT.PUT_LINE('Total Order: ' || v_order_count);
END product_query;
但它不显示任何输出。我没有看到代码有任何问题。我应该改变输出信息的方式吗?有比 DBMS_OUTPUT.PUT_LINE 更好的方法吗? 谢谢,
【问题讨论】:
-
您的代码中有一些拼写错误。如果您的程序有效,我想您的编辑器不会显示输出。你可以试试 SET SERVEROUTPUT ON
-
谢谢,但这不是 SQL*Plus 命令吗?我正在使用 SQL Developer UI。另外,我认为问题是由于顶部的 RETURN NUMBER,但它需要在 IS 之后返回。
-
正如 Justin Cave 在他的回复中指出的那样:您声明的是
PROCEDURE而不是FUNCTION。只有后者,它执行RETURN一个值。如果你想从一个过程中取回一些东西,你需要在它的参数列表中使用OUT或IN OUT参数。喜欢CREATE [OR REPLACE] PROCEDURE procName (paramName OUT DataType)或CREATE [OR REPLACE] PROCEDURE procName (paramName IN OUT DataType)
标签: oracle stored-procedures plsql