当前位置:首页 » 存储配置 » oracle存储过程case

oracle存储过程case

发布时间: 2022-07-18 19:11:59

存储过程里面的CASE,WHEN,THEN的用法。

方法1:CASE
WHEN 条件1 THEN 结果1
WHEN 条件2 THEN 结果2
...
WHEN 条件i THEN 结果i
ELSE 默认结果END方法2:
CASE 字段/变量
WHEN 值1 THEN 结果1
WHEN 值2 THEN 结果1
...
WHEN 值i THEN 结果1
ELSE 默认结果
END
用法:比如查询:SELECT 字段1,(CASE ... END) FROM 表WHERE 字段1 = (CASE ... END)

㈡ oracle中存储过程case怎么用

case when a=1 then 1 when a=2 then 2 else 3 end; 语法网上一搜一大把呀

㈢ 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';

㈣ 求一个较复杂的ORACLE写得存储过程,并给出详细解释!

刚写的一个~凑合看的

create or replace procere inr_HkeaaInfo
AS
cursor mycur is
select frm_id ,pb_group
from ly_oa_propabring,ly_oa_runmedia
where pb_runmedia=rm_id;--定义一个游标
my_frm_id number;
my_pb_group varchar2(20);
my_hi_score varchar2(10);
m number;
n number;
str_length number;

begin

str_length :=length(ltrim(rtrim(pb_group)));
--my_pb_group左右排空再取长

open mycur; --打开游标

loop
-----游标循环
fetch mycur --获取游标
into my_frm_id,my_pb_group;
exit when mycur%notfound OR mycur%NOTFOUND IS NULL
----游标循环结束

----case判断游标取得的my_frm_id值
case
when my_frm_id=1 then my_hi_score := 15;
when my_frm_id=2 then my_hi_score := 12;
when my_frm_id=3 then my_hi_score := 10;
when my_frm_id=4 then my_hi_score := 8;
for n in 1..str_length loop
----循环取出pb_group中的所有编号,挨个插入LY_OA_HkeaaInfo 表的------------HI_GroupId中
m:=2*n-1;
str_length :=length(ltrim(rtrim(my_pb_group)));
insert into LY_OA_HkeaaInfo (HI_id,HI_GroupId,HI_Score)
values (swqhiid.next_val,substr(my_pb_group,m,1),my_hi_score);
end loop;

end case;
----退出case判断

end loop;

close mycur;
commit;

end inr_HkeaaInfo;

㈤ oracle存储过程包错

createorreplaceprocerep_salis

v_enonumber;
v_salnumber;


cursorc_salis
selecteno,salfromemployee;

begin--此处
openc_sal;
LOOP
FETCHc_sal
INTOv_eno,v_sal;
EXITwhenc_sal%NOTFOUND;
ifv_sal>1000then
ifv_sal>2000then
updateemployeesetsal=v_sal+1000whereeno=v_eno;
else
updateemployeesetsal=v_sal+200whereeno=v_eno;
endif;--此处
elseupdateemployeesetsal=v_sal+150whereeno=v_eno;
endif;

ENDLOOP;
closec_sal;
commit;

exception
whenothersthen
rollback;

endp_sal;

㈥ Oracle存储过程返回记录集

declare
begin
for a in(select s.stuid,s.stuname,s.stusex,c.classnum,c.classname ,r.sturesults tmp from student s
left join result r on s.stuid=r.stuid
left join calss c on r.classnum=c.classnum
)
case when a.tmp>90 then
你要执行的操作;
case when a.tmp>60 and a.tmp<90 then
你要执行的操作;
case when a.tmp<60 then
你要执行的操作;
else
end case;
end;

㈦ oracle存储过程中如何调用自定义的函数

oracle中调用函数是十分简单的,存储过车调用函数也是一样的。例子如下:
create procere pro_name1
as
v_para varchar2(200):=‘Im Danny';
begin
--without parameters case
pro_name2;
--with parameters case
pro_name3(v_para);
end;

热点内容
直出服务器怎么样 发布:2024-10-07 15:41:36 浏览:476
比亚迪唐dmi哪个配置性价比 发布:2024-10-07 15:19:28 浏览:901
编译器按变量 发布:2024-10-07 15:07:03 浏览:773
怎么忘记电脑wifi密码怎么办 发布:2024-10-07 15:02:18 浏览:424
安卓开发java开发 发布:2024-10-07 15:01:29 浏览:94
工业级安卓主板价格怎么样 发布:2024-10-07 14:07:57 浏览:628
编程先乘除 发布:2024-10-07 13:58:45 浏览:271
编译内核时发生循环编译 发布:2024-10-07 13:58:43 浏览:497
当下笔记本电脑什么配置好 发布:2024-10-07 12:57:33 浏览:471
安卓倒车轨迹怎么调 发布:2024-10-07 12:54:47 浏览:916