Oracle中的存储过程简单例子
http://blog.csdn.net/o9109003234/article/details/24910039
?
?
---創(chuàng)建表
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');
---創(chuàng)建存儲(chǔ)過程
create or replace procedure test_count
as
v_total number(1);
begin
? select count(*) into v_total from TESTTABLE;
? DBMS_OUTPUT.put_line('總?cè)藬?shù):'||v_total);
end;
--準(zhǔn)備
--線對(duì)scott解鎖:alter user scott account unlock;?
--應(yīng)為存儲(chǔ)過程是在scott用戶下。還要給scott賦予密碼
---alter user scott identified by tiger;
---去命令下執(zhí)行
EXECUTE test_count;
----在ql/spl中的sql中執(zhí)行
begin
? -- Call the procedure
? test_count;
end;
create or replace procedure TEST_LIST
? ? ? AS?
? ? ? ---是用游標(biāo)
? ? ? ? CURSOR test_cursor IS select t.id1,t.name from TESTTABLE t;
? ? ? begin
? ? ? ? for Test_record IN test_cursor loop---遍歷游標(biāo),在打印出來
? ? ? ? ? ?DBMS_OUTPUT.put_line(Test_record.id1||Test_record.name);
? ? ? ? ? ?END LOOP;
? ? ? ? ? ? test_count;--同時(shí)執(zhí)行另外一個(gè)存儲(chǔ)過程(TEST_LIST中包含存儲(chǔ)過程test_count)
? ? ? ? ? ? end;
? ? ? -----執(zhí)行存儲(chǔ)過程TEST_LIST
? ? ? begin?
? ? ? ? ?TEST_LIST;
? ? ? ? ?END;
? ? ? ?---存儲(chǔ)過程的參數(shù)
? ? ? ? ---IN ?定義一個(gè)輸入?yún)?shù)變量,用于傳遞參數(shù)給存儲(chǔ)過程 ??
? ? ? ? --OUT 定義一個(gè)輸出參數(shù)變量,用于從存儲(chǔ)過程獲取數(shù)據(jù) ??
? ? ? ? ---IN OUT ?定義一個(gè)輸入、輸出參數(shù)變量,兼有以上兩者的功能 ?
? ? ? ? --這三種參數(shù)只能說明類型,不需要說明具體長(zhǎng)度 比如 varchar2(12),defaul 可以不寫,但是作為一個(gè)程序員最好還是寫上。
? ? ? ??
? ? ? ---創(chuàng)建有參數(shù)的存儲(chǔ)過程
? ? ? create or replace procedure 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;
? ? ? ----執(zhí)行存儲(chǔ)過程
? ? ? begin
? ? ? ? ?test_param('1');
? ? ? ?end;
? ? ? ?
? ? ? ?default '0'
? ? ? ---創(chuàng)建有參數(shù)的存儲(chǔ)過程
? ? ? create or replace procedure 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;
? ? ? ----執(zhí)行存儲(chǔ)過程
? ? DECLARE ?
? ? ? ? v_name VARCHAR2(32); ??
? ? ? ? BEGIN ?
? ? ? ? test_paramout(v_name);
? ? ? ? DBMS_OUTPUT.PUT_LINE('name:'||v_name); ??
? ? ? ? END; ?
? ? -------IN OUT
? ? ---創(chuàng)建存儲(chǔ)過程
? ? create or replace procedure 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('新的電話號(hào)碼:'||p_phonenumber); ?
? ? END; ?
? ? -----sql命令下,查詢當(dāng)前用戶的存儲(chǔ)過程或函數(shù)的源代碼,
? ? -----可以通過對(duì)USER_SOURCE數(shù)據(jù)字典視圖的查詢得到。USER_SOURCE的結(jié)構(gòu)如下:
? ??
? ? 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>?
? ? ---查詢出存儲(chǔ)過程的定義語句
? ? select text from user_source WHERE NAME='TEST_COUNT';
? ? ----查詢存儲(chǔ)過程test_paramINOUT的參數(shù)
? ? SQL> DESCRIBE test_paramINOUT;
? ? Parameter ? ? Type ? ? Mode ? Default??
? ? ------------- -------- ------ --------?
? ? P_PHONENUMBER VARCHAR2 IN OUT ?
? ? SQL>?
? ? ---查看當(dāng)前的存儲(chǔ)過程的狀態(tài)是否正確,
? ? ---VALID為正確,INVALID表示存儲(chǔ)過程無效或需要重新編譯
? ? SELECT STATUS FROM USER_OBJECTS WHERE OBJECT_NAME='TEST_COUNT';
? ? -----如果要檢查存儲(chǔ)過程或函數(shù)的依賴性,可以通過查詢數(shù)據(jù)字典USER_DENPENDENCIES來確定,該表結(jié)構(gòu)如下:
? ? 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> ?
? ? ---查詢存儲(chǔ)過程TEST_COUNT的依賴關(guān)系
? ? SELECT REFERENCED_NAME,REFERENCED_TYPE FROM USER_DEPENDENCIES WHERE NAME='TEST_COUNT';
轉(zhuǎn)載于:https://www.cnblogs.com/Damon-Luo/p/5973856.html
總結(jié)
以上是生活随笔為你收集整理的Oracle中的存储过程简单例子的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文件操作(初阶)
- 下一篇: EClipse开发NDK流程