关于#oracle#的问题:oracle创建存储过程时出现了这个问题

oracle创建存储过程时出现了这个问题

create or replace procedure get_tradeinfo(
p_cardid tradeinfo.cardid%TYPE,
p_tradedate tradeinfo.tradedate%TYPE,
customername out userinfo.customername%type,
tradetype out tradeinfo.tradetype%TYPE,
trademoney out tradeinfo.trademoney%TYPE)
is
begin
    select userinfo.customername,tradeinfo.tradetype, tradeinfo.trademoney into customername,tradetype,trademoney  from userinfo inner join tradeinfo on userinfo.cardid=tradeinfo.cardid where tradeinfo.cardid=p_cardid;
EXCEPTION
    when no_data_found then
        dbms_output.put_line('不存在该客户!');
end;


DECLARE
    v_cardid tradeinfo.cardid%type;
    v_tradedate tradeinfo.tradedate%type;--定义变量
    v_trademoney tradeinfo.trademoney%type;
    v_customername userinfo.customername%type;
    v_tradetype tradeinfo.tradetype%type;
begin
    v_cardid :='6227266610105112';
    v_tradedate :='2017-11-21 09:21:16';
    get_tradeinfo(v_cardid,v_tradedate,v_trademoney,v_customername,v_tradetype);
    dbms_output.put_line('用户姓名:'||v_customername||',交易金额:'||v_trademoney||',交易类型:'||v_tradetype||'');
end;

![img](运行结果及报错内容
https://img-mid.csdnimg.cn/release/static/image/mid/ask/102507218966167.png "#left")

尝试了很多次,老是出这个问题

select userinfo.customername,tradeinfo.tradetype, tradeinfo.trademoney into customername,tradetype,trademoney  from userinfo inner join tradeinfo on userinfo.cardid=tradeinfo.cardid where tradeinfo.cardid=p_cardid;

这个sql查询到多条数据了呀,如果有多条数据不能直接 select into,可以使用游标遍历

这种写法我是没见过,你怎么在存储过程里还写DECLARE,直接用多个块包着不好吗?如下形式
create or replace procedure 名字(输入输出变量)
is
声明变量
begin
begin

end;
begin

end;
end 名字;
直接块套块就行,还写DECLARE的,我是没见过。

可能是你表没有别名

create or replace procedure get_tradeinfo(
p_cardid tradeinfo.cardid%TYPE,
p_tradedate tradeinfo.tradedate%TYPE,
customername out userinfo.customername%type,
tradetype out tradeinfo.tradetype%TYPE,
trademoney out tradeinfo.trademoney%TYPE)
is
begin
    select userinfo.customername,tradeinfo.tradetype, tradeinfo.trademoney into customername,tradetype,trademoney  from userinfo inner join tradeinfo on userinfo.cardid=tradeinfo.cardid where tradeinfo.cardid=p_cardid;
EXCEPTION
    when no_data_found then
        dbms_output.put_line('不存在该客户!');
end;
 
DECLARE
    v_cardid tradeinfo.cardid%type;
    v_tradedate tradeinfo.tradedate%type;--定义变量
    v_trademoney tradeinfo.trademoney%type;
    v_customername userinfo.customername%type;
    v_tradetype tradeinfo.tradetype%type;
begin
    v_cardid :='6227266610105112';
    v_tradedate :='2017-11-21 09:21:16';
    get_tradeinfo(v_cardid,v_tradedate,v_trademoney,v_customername,v_tradetype);
    dbms_output.put_line('用户姓名:'||v_customername||',交易金额:'||v_trademoney||',交易类型:'||v_tradetype||'');
end;