當前位置:首頁 » 存儲配置 » 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 14:07:57 瀏覽:625
編程先乘除 發布:2024-10-07 13:58:45 瀏覽:268
編譯內核時發生循環編譯 發布:2024-10-07 13:58:43 瀏覽:494
當下筆記本電腦什麼配置好 發布:2024-10-07 12:57:33 瀏覽:468
安卓倒車軌跡怎麼調 發布:2024-10-07 12:54:47 瀏覽:913
問道刷道隊伍怎麼配置 發布:2024-10-07 12:09:17 瀏覽:324
androidservice使用 發布:2024-10-07 12:00:01 瀏覽:263
樂視2安卓版本怎麼升級 發布:2024-10-07 11:51:11 瀏覽:697
方舟電腦版怎麼進入官方伺服器 發布:2024-10-07 11:09:32 瀏覽:807
百度雲快速上傳 發布:2024-10-07 10:52:25 瀏覽:482