oracle带输入参数的存储过程
❶ oracle怎么调用带参数的存储过程
sqlplus或者PL/SQL SQL窗口输入(单独调用存储过程):无参数EXEC 过程名;或者BEGIN过程名END; IN 参数EXEC 过程名(入参数..);或者BEGIN过程名(入参数...)END; OUT参数,IN OUT参数variable 绑定变量名 数据类型; //定义一个变量接收出参数的值;EXEC 过程名(:绑定变量名);
❷ Oracle 求一存储过程带输入输出参数 并且调用的实例
下面的例子代码, 仅仅用于演示 in out , 没有任何数据库检索的处理。
注:
Oracle的INOUT写在变量名后面。
SQL>(
2p_user_nameINVARCHAR2,
3p_out_valOUTVARCHAR2,
4p_inout_valINOUTVARCHAR2
5)AS
6BEGIN
7dbms_output.put_line('Hello'||p_user_name||p_inout_val||'!');
8p_out_val:='A';
9p_inout_val:='B';
10ENDHelloWorld2;
11/
Procerecreated.
SQL>DECLARE
2p_outvalVARCHAR2(10);
3p_inoutvalVARCHAR2(10):='~Hi~';
4BEGIN
5HelloWorld2('Edward',p_outval,p_inoutval);
6
7dbms_output.put_line('p_outval='||p_outval);
8dbms_output.put_line('p_inoutval='||p_inoutval);
9END;
10/
HelloEdward~Hi~!
p_outval=A
p_inoutval=B
PL/.
SQL>
❸ oracle存储过程的输入参数和输出参数
是的,无论是输入的参数还是输出的参数,在此过程中都视为一个参数,所以一般情况下对应你定义的参数类型和个数带入,便可调用。
❹ 可否帮我举一个oracle的存储过程 并且要带输入输出参数 还有如何调用的语句
reate or replace procere get_content_river(cxrq in varchar2,--查询日期
fsr in varchar2,--发送人自动发送写自动发送
content out varchar2,
bz out varchar2,--0为失败1为成功
msg out varchar2) is
v_zm varchar2(50);
v_xzqy varchar2(20);
v_xzbm varchar2(20);
n_jjsw number(10,3);
n_bzsw number(10,3);
v_type varchar2(2);
cursor cur_st_river_r(cxsj varchar2)is
select *
from st_river_r
where substr(to_char(st_river_r.ymdhm,'yyyy-mm-dd'),1,10) = cxsj;
rec_st_river_r st_river_r%rowtype;
begin
msg:='';
content:='';
bz := '1';
v_type := '1';--默认为人工
open cur_st_river_r(cxrq);
loop
fetch cur_st_river_r into rec_st_river_r;
exit when cur_st_river_r%notfound;
--取得警戒水位\保证水位
begin
select cshct.alwtlv,cshct.gnwtlv into n_jjsw,n_bzsw from CSHCT where cshct.ennmcd = rec_st_river_r.ennmcd;
exception
when others then
n_jjsw :=0;
n_bzsw :=0;
end;
--判断
if n_jjsw <= rec_st_river_r.zr then
--取得站名
begin
select prnmsr.ennm into v_zm from prnmsr where prnmsr.ennmcd = rec_st_river_r.ennmcd;
exception
when others then
v_zm :='无';
end;
--行政区域编码
begin
select DSEN.DSCD into v_xzbm from dsen where dsen.ennmcd = rec_st_river_r.ennmcd;
exception
when others then
v_xzbm :='无';
end;
--取得行政区域名称
begin
select DSCDNM.DSNM into v_xzqy from dscdnm where dscdnm.dscd = v_xzbm;
exception
when others then
v_xzqy := '无';
end;
content:= content||'报警站名称:'||v_zm||';'||'行政区名称:'||v_xzqy||';'||'当前水位:'||to_char(rec_st_river_r.zr)||';'
||'警戒水位:'||n_jjsw||';'||'保证水位:'||n_bzsw||';';
end if;
end loop;
if fsr = '自动发送' then
v_type := '2';
end if;
if length(content)> 0 then
--插入短信记录表 message
insert into message(
ID,
CONTENT,
SENDDATE,
REPLY,
PERSON,
TYPE,
CONTENTTYPE)
values
(
seq_message.nextval,
content,
sysdate,
'2',
fsr,
v_type,
'2'
);
end if;
close cur_st_river_r;
exception
when others then
if cur_st_river_r%isopen then
close cur_st_river_r;
bz := 0;
end if;
content := '-1';
msg := SQLERRM;
❺ oracle带输入参数的存储过程
createorreplaceproceresp_test(iv_yinvarchar2,iv_minvarchar2)
as
v_countinteger;
begin
selectcount(*)intov_countfromtable_testwhereyear=iv_yandmonth=iv_m;
ifv_count>0then
Raise_Application_Error(-20001,'数据已存在!');
else
insertintotable_testvalues(iv_y,iv_m);
commit;
endif;
end;
❻ Oracle存储过程的带参存储过程
模式描述IN参数(默认模式)(输入参数)用来从调用环境中向存储过程传递值,不能给IN参数赋值,给此参数传递的值可以是常量、有值的变量、表达式等。OUT参数(输出参数)用来从过程中返回值给调用者,不能将此参数的值赋给另一个变量,不能是常量或表达式。在过程体内,必须给OUT参数赋值。INOUT参数(输入输出参数)既可以从调用者向过程中传递值,执行过程后还可返回可能改变了的值给调用者。 模式描述IN参数(默认模式)(输入参数)用来从调用环境中向存储过程传递值,不能给IN参数赋值,给此参数传递的值可以是常量、有值的变量、表达式等。OUT参数(输出参数)用来从过程中返回值给调用者,不能将此参数的值赋给另一个变量,不能是常量或表达式。在过程体内,必须给OUT参数赋值。INOUT参数(输入输出参数)既可以从调用者向过程中传递值,执行过程后还可返回可能改变了的值给调用者。模式
描述
用来从调用环境中向存储过程传递值,不能给IN参数赋值,
给此参数传递的值可以是常量、有值的变量、表达式等。
用来从过程中返回值给调用者,不能将此参数的值赋给另
一个变量,不能是常量或表达式。在过程体内,必须给
OUT参数赋值。
既可以从调用者向过程中传递值,执行过程后还可返回可能
改变了的值给调用者。 如果形式参数是IN模式的参数,实际参数可以是一个具体的值或一个有值的变量;如果形式参数是OUT模式的参数,实际参数必须是一个变量,当调用过程后,此变量就被赋值了。可以输出此变量的值来测试过程执行的结果。如果形式参数是INOUT模式的参数,则实际参数必须是一个预先已经赋值的变量。执行完过程后,该变量被重新赋值,可以输出此变量的值来测试过程执行结果。
❼ oracle中怎么让带有输入参数的存储过程定时执行
两种方法
1。oracle中有 [作业] 功能,创建一个作业,然后,设置定时执行。
2。用系统的[定时任务],定一个时间,然后调用bat文件,从bat中调用oracle的存储过程。
❽ oracle中怎么执行带有输出参数的存储过程,在程序中我知道怎么调用,
1、新建一个存储过程(Procere)。
❾ Oracle存储过程及举例(几种参数情况的存储
create table TESTTABLE
(
id1 VARCHAR2(12),
name VARCHAR2(32)
)
select t.id1,t.name from TESTTABLE t
insert into TESTTABLE (ID1, NAME)
values ('1', 'zhangsan');
insert into TESTTABLE (ID1, NAME)
values ('2', 'lisi');
insert into TESTTABLE (ID1, NAME)
values ('3', 'wangwu');
insert into TESTTABLE (ID1, NAME)
values ('4', 'xiaoliu');
insert into TESTTABLE (ID1, NAME)
values ('5', 'laowu');
---创建存储过程
create or replace procere test_count
as
v_total number(1);
begin
select count(*) into v_total from TESTTABLE;
DBMS_OUTPUT.put_line('总人数:'||v_total);
end;
--准备
--线对scott解锁:alter user scott account unlock;
--应为存储过程是在scott用户下。还要给scott赋予密码
---alter user scott identified by tiger;
---去命令下执行
EXECUTE test_count;
----在ql/spl中的sql中执行
begin
-- Call the procere
test_count;
end;
create or replace procere TEST_LIST
AS
---是用游标
CURSOR test_cursor IS select t.id1,t.name from TESTTABLE t;
begin
for Test_record IN test_cursor loop---遍历游标,在打印出来
DBMS_OUTPUT.put_line(Test_record.id1||Test_record.name);
END LOOP;
test_count;--同时执行另外一个存储过程(TEST_LIST中包含存储过程test_count)
end;
-----执行存储过程TEST_LIST
begin
TEST_LIST;
END;
---存储过程的参数
---IN 定义一个输入参数变量,用于传递参数给存储过程
--OUT 定义一个输出参数变量,用于从存储过程获取数据
---IN OUT 定义一个输入、输出参数变量,兼有以上两者的功能
--这三种参数只能说明类型,不需要说明具体长度 比如 varchar2(12),defaul 可以不写,但是作为一个程序员最好还是写上。
---创建有参数的存储过程
create or replace procere test_param(p_id1 in VARCHAR2 default '0')
as v_name varchar2(32);
begin
select t.name into v_name from TESTTABLE t where t.id1=p_id1;
DBMS_OUTPUT.put_line('name:'||v_name);
end;
----执行存储过程
begin
test_param('1');
end;
default '0'
---创建有参数的存储过程
create or replace procere test_paramout(v_name OUT VARCHAR2 )
as
begin
select name into v_name from TESTTABLE where id1='1';
DBMS_OUTPUT.put_line('name:'||v_name);
end;
----执行存储过程
DECLARE
v_name VARCHAR2(32);
BEGIN
test_paramout(v_name);
DBMS_OUTPUT.PUT_LINE('name:'||v_name);
END;
-------IN OUT
---创建存储过程
create or replace procere test_paramINOUT(p_phonenumber in out varchar2)
as
begin
p_phonenumber:='0571-'||p_phonenumber;
end;
----
DECLARE
p_phonenumber VARCHAR2(32);
BEGIN
p_phonenumber:='26731092';
test_paramINOUT(p_phonenumber);
DBMS_OUTPUT.PUT_LINE('新的电话号码:'||p_phonenumber);
END;
-----sql命令下,查询当前用户的存储过程或函数的源代码,
-----可以通过对USER_SOURCE数据字典视图的查询得到。USER_SOURCE的结构如下:
SQL> DESCRIBE USER_SOURCE ;
Name Type Nullable Default Comments
---- -------------- -------- -------
-------------------------------------------------------------------------------------------------------------
NAME VARCHAR2(30) Y Name of the object
TYPE VARCHAR2(12) Y Type of the object: "TYPE", "TYPE BODY", "PROCEDURE", "FUNCTION",
"PACKAGE", "PACKAGE BODY" or "JAVA SOURCE"
LINE NUMBER Y Line number of this line of
source
TEXT VARCHAR2(4000) Y Source text
SQL>
---查询出存储过程的定义语句
select text from user_source WHERE NAME='TEST_COUNT';
----查询存储过程test_paramINOUT的参数
SQL> DESCRIBE test_paramINOUT;
Parameter Type Mode Default?
------------- -------- ------ --------
P_PHONENUMBER VARCHAR2 IN OUT
SQL>
---查看当前的存储过程的状态是否正确,
---VALID为正确,INVALID表示存储过程无效或需要重新编译
SELECT STATUS FROM USER_OBJECTS WHERE OBJECT_NAME='TEST_COUNT';
-----如果要检查存储过程或函数的依赖性,可以通过查询数据字典USER_DENPENDENCIES来确定,该表结构如下:
SQL> DESCRIBE USER_DEPENDENCIES;
Name Type Nullable Default Comments
-------------------- ------------- -------- ------- ----------------------------------------------------------
NAME VARCHAR2(30) Name of the object
TYPE VARCHAR2(17) Y Type of the object
REFERENCED_OWNER VARCHAR2(30) Y Owner of referenced object (remote owner if remote object)
REFERENCED_NAME VARCHAR2(64) Y Name of referenced object
REFERENCED_TYPE VARCHAR2(17) Y Type of referenced object
REFERENCED_LINK_NAME VARCHAR2(128) Y Name of dblink if this is a remote object
SCHEMAID NUMBER Y
DEPENDENCY_TYPE VARCHAR2(4) Y
SQL>
---查询存储过程TEST_COUNT的依赖关系
SELECT REFERENCED_NAME,REFERENCED_TYPE FROM USER_DEPENDENCIES WHERE NAME='TEST_COUNT';