您好,我是PL/SQL的初学者,希望您能提供一些帮助。
因此,我在这里创建了这个过程,我的目标是在执行该过程时,输入一个5位整数(邮政编码),然后从表中选择这些值并显示,就像我执行了如下查询一样
SELECT * FROM customers WHERE customer_zipcode = "input zipcode".
create or replace PROCEDURE LIST_CUSTOMER_ZIPCODE(
p_zipcode IN customers.customer_zipcode%TYPE,
p_disp OUT SYS_REFCURSOR)
-- User input Variable, Display Variable
IS
BEGIN
OPEN p_disp for SELECT customer_first_name, customer_zipcode FROM customers
WHERE customer_zipcode=p_zipcode;
EXCEPTION
-- Input Sanitization
WHEN no_data_found THEN
dbms_output.put_line('-1');
END;
EXEC LIST_CUSTOMER_ZIPCODE(07080);
当我执行这个命令时,我总是得到这个错误。
https://i.stack.imgur.com/nCI8T.png
3条答案
按热度按时间flmtquvp1#
如果您使用的是SQL*Plus或SQL Developer,则可以声明一个绑定变量,然后调用传递该变量的过程并打印该变量:
但是,您的异常处理块永远不会被调用,因为游标可以返回零行而不会引发该异常,因此该过程可以简化为:
aiazj4mn2#
您不能只是 * 执行 * 这样的过程,因为它需要2个参数;一个是IN,另一个是OUT(包含结果集引用游标)。
我没有您的表,因此我将使用Scott的示例模式进行演示,方法是传递部门编号并返回在该部门工作的雇员列表。
程序:
您可以这样使用它:
fhg3lkii3#
请尝试执行列表_客户_邮政编码(:p_邮政编码);
如果你把':'放在任何字符串之前,它将成为替换字符串,你可以键入你的输入。