作者:奈奈奈酱奈32_875 | 来源:互联网 | 2023-05-18 16:29
我用的navicatfororacle连接的数据库网上找了一个例子createorreplaceprocedureoutput_dateisbegindbms_o
我用的navicat for oracle连接的数据库
网上找了一个例子
create or replace procedure output_date is
begin
dbms_output.put_line(sysdate);
end output_date;
call output_date(); 不带参数的这样执行是对的
但是如果带参数,例如
create or replace procedure get_username(v_id in number,v_username out varchar2)
as
begin
select username into v_username from tab_user where id = v_id; --变量赋值
exception
when no_data_found then
raise_application_error(-20001,'ID不存在!');
end get_username;
call get_username(1,'a');
出错提示
[SQL] call GET_USERNAME(1,'a')
[Err] ORA-06577: output parameter not a bind variable
应该如何调用呢?
过程是没有问题的,不执行语句而在过程上右键执行输入参数可以直接返回结果。
6 个解决方案
v_username out varchar2
你先改成
v_username in varchar2
应该就可以执行了
差别就在in 和 out~~ 百度下 就知道区别啦~ out是要带回来的
DECLARE
TMP varchar2(20);
BEGIN
TMP:='a';
get_username(324,TMP);
dbms_output.put_line(TMP);
END ;
解决了
--下面就是调用带参数的存储过程:
bankcurinterestcalculation(var_maxrecorddate,var_idno,benamount => var_benamount4,interest => var_interest4,balance => var_balance4,curbalance => var_curbalance4,sumamount => var_sumamount4,lastbalance => var_lastbalance4)
就着楼主的贴子我想问下:
create or replace procedure REPORTVIEWER_count_type_proc
(@year int)
as
begin
select distinct a.r_title,b.rdlc_num y_num_e,null m_num_e,null d_num_e,null m_num_s,null y_num_zf,null m_num_zf
from REPORTVIEWER a
inner join
(select sum(rdlc_num) as rdlc_num,rdlc_id,user_id from REPORTVIEWER_count d
where to_char(d.create_date,'yyyy')=@year group by rdlc_id,user_id) b
on b.rdlc_id=a.sid
inner join s_hse_ticket e on e.reghumsid=b.user_id
where e.erifystate='完成'
end
这样写在Oralce数据中执行exec提示无效SQL语句
请问这是为什么?