Database PL SQL程序包,PLS-00323:子程序或游标
请帮帮我。我不熟悉PL SQL。我想在屏幕上显示所有这些细节Database PL SQL程序包,PLS-00323:子程序或游标,database,oracle,plsql,package,plsql-package,Database,Oracle,Plsql,Package,Plsql Package,请帮帮我。我不熟悉PL SQL。我想在屏幕上显示所有这些细节 Customer.customerNo, Customer.customerName, Customer.custBalance, customerOrder.orderDate, customerOrder.orderNo 来自2个表[客户,客户订单]。使用带有过程的唯一包。请帮助我如何创建这样的包 create or replace package my_pkg as Procedure getAllOrders2(custom
Customer.customerNo, Customer.customerName, Customer.custBalance, customerOrder.orderDate, customerOrder.orderNo
来自2个表[客户,客户订单]。使用带有过程的唯一包。请帮助我如何创建这样的包
create or replace package my_pkg as
Procedure getAllOrders2(customer_id IN varchar2);
end my_pkg;
/
create or replace package body my_pkg as
Procedure getAllOrders2(customer_id IN varchar2) is
begin
dbms_output.put_line('customer_id is: '||customer_id );
end getAllOrders2;
end my_pkg;
/
输出应为:
客户编号、客户名称、订单编号、订单日期、客户余额
一个选项是使用光标
进行循环(为什么?因为客户可以有多个订单,并且-如果使用单个select
语句-可能会出现行数过多
错误,因此您必须选择到集合中,或者-如我的示例中-使用循环
SQL> create or replace procedure getallorders2 (par_customer_id in customer.customerno%type)
2 is
3 begin
4 for cur_r in (select c.customerno,
5 c.customername,
6 c.custbalance,
7 o.orderdate,
8 o.orderno
9 from customer c join customerorder o
10 on c.customerno = o.customerno
11 where c.customerno = par_customer_id
12 )
13 loop
14 dbms_output.put_line
15 (cur_r.customerno ||', '||
16 cur_r.customername ||', '||
17 cur_r.custbalance ||', '||
18 cur_r.orderno ||', '||
19 to_char(cur_r.orderdate, 'dd.mm.yyyy')
20 );
21 end loop;
22 end;
23 /
Procedure created.
测试:
SQL> set serveroutput on;
SQL> begin
2 getallorders2('A101');
3 end;
4 /
A101, basant, 32000, O101, 04.02.2021
PL/SQL procedure successfully completed.
SQL>
既然您知道了如何操作,请将该代码移动到包体中。您需要CustomerOrder表做什么?“Customer details”在Customer表中……同时表示您“想要获取客户详细信息”-具体如何?你想用它们做什么?然后在屏幕上显示?输入变量?其他什么?@Littlefoot我更新了问题。