【问题标题】:SQL: Display results from table in a stored procedureSQL:在存储过程中显示表中的结果
【发布时间】:2016-12-19 09:40:20
【问题描述】:

我必须实施一个包装系统。我在表中有以下表格和插入:

--a
create table client(
IdClient number(5),
NameClient varchar2(20),
Address varchar2(20),
primary key(IdClient)
);

create table tpackage(
IdPackage number(5),
IdClient number(5),
WLocation varchar2(20),
Courier varchar2(20),
DeliveryTime date,
Status varchar2(20),
primary key(IdPackage),
constraint fk_package foreign key(IdClient) references client(IdClient)
);

insert into client values(1,'Robb','Dimitrie Cantemir 1');
insert into client values(2,'Ion','Aleea Cascadei 15');
insert into client values(3,'Popan','Progresului 1');
insert into client values(4,'Pop','Carei 15');
insert into client values(5,'Grozavescu','Vasile Pirvan 1');
insert into client values(6,'Popa','Orsova 11');

insert into tpackage values(01,1,'Diminetii 2','Ilie','22-Jan-2017','in-transit');
insert into tpackage values(02,6,'Liege 1','Popescu','23-NOV-2016','delivered');
insert into tpackage values(03,4,'Crisana 3','Alexandru','20-Jan-2017','in-transit');
insert into tpackage values(04,3,'Torontal 14','Stefan','18-Dec-2016','delivered');
insert into tpackage values(05,2,'Carei 15','Ionescu','23-Feb-2017','in-transit');

我必须实现一个存储过程,该过程显示作为参数给定的客户端的运输中包的所有包信息。这是我到目前为止所做的:

create or replace procedure displayPackages(i_IdClient number) as 
begin
--SELECT t.Status from tpackage as t inner join client as c on t.IdClient = c.IdClient where t.Status='in-transit' and c.IdClient = IdClient and t.IdClient = IdClient and c.IdClient = t.IdClient;
select t.status,c.NameClient from tpackage t,client c where t.Status='in-transit' and c.IdClient = i_IdClient and c.IdClient = t.IdClient;
end displayPackages;

但这不起作用。提前致谢!

【问题讨论】:

  • 最好将这些连接更改为正确的 ANSI 样式连接,因为您使用的是过时的格式。
  • 定义“不工作”。我猜你会收到一个 PLS-00428 编译错误,告诉你应该有一个 into 子句,但我们不必猜测。如果您使用的是 12c,请查看隐式结果集,如我在此处的回复:stackoverflow.com/questions/351489/…

标签: sql oracle stored-procedures plsql


【解决方案1】:

在 PL/SQL 中,您不能只选择。您需要指定将存储查询结果的变量。

create or replace procedure displayPackages(i_IdClient number) as 
tstatus tpackage.status%type;
cname client.NameClient%type;
begin
select t.status,c.NameClient into tstatus, cname 
  from tpackage t inner join client c on (c.IdClient = t.IdClient)
  where t.Status='in-transit' and c.IdClient = i_IdClient;
--after selecting data into variables you can do your calculations or other operations on variables
end displayPackages;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-23
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 2021-01-26
    相关资源
    最近更新 更多