激动,新手第一次小试oracle的存储过程
之前一直寫觸發(fā)器,期間一直接觸和聽說了存儲過程,好多天過去了,今天才第一次使用了存儲過程。
一,問題提出:http://zhidao.baidu.com/question/113921713.html
求一個oracle程序塊,循環(huán)插入A表一百行數(shù)據(jù).
就是定義一個變量,然后讓人他循環(huán)一百次,往數(shù)據(jù)庫里插入數(shù)據(jù). 插入的行只有一列是不一樣的,就是這個變量,其它一樣.請問如何寫. 表結(jié)構(gòu)就二列.一個是放這個變量 a列,一個是名稱列.create table A (a numeric,b varchar2(50) ) 有會的請賜教 ,謝謝二,解決過程
1,創(chuàng)建表,需要在plsql中的command窗口
create table e (a numeric,b varchar2(50) );2,創(chuàng)建存儲過程,在plsql中,和trigger的創(chuàng)建方式差不多。
create or replace procedure insert_a is temp varchar2(20):='aaaa'; beginfor i in 1..100 loopinsert into e(a,b) values(i,temp);end loop; end;3,在command窗口調(diào)用存儲過程exec,注意調(diào)用成功之后,需要按下plsql的“寫入”按鈕,和使用update之后commit寫入一樣。
4,執(zhí)行之后的e表,100條記錄出來了。
三,oracle存儲過程詳解。轉(zhuǎn)自http://blog.163.com/study_notes/blog/static/17610324320118610611676/存儲過程
1 什么是存儲過程?
?用于在數(shù)據(jù)庫中完成特定的操作或者任務(wù)。是一個PLSQL程序塊,可以永久的保存在數(shù)據(jù)庫中以供其他程序調(diào)用。
2 存儲過程的參數(shù)模式
存儲過程的參數(shù)特性:
?IN類型的參數(shù)?OUT類型的參數(shù)?IN-OUT類型的參數(shù)
值被?傳遞給子程序?返回給調(diào)用環(huán)境?傳遞給子程序
返回給調(diào)用環(huán)境
參數(shù)形式?常量?未初始化的變量?初始化的變量
使用時?默認類型?必須明確指定?必須明確指定
3 無參數(shù)存儲過程的使用:
CREATE OR REPLACE PROCEDURE 過程名 [(parameter,...)]
IS
定義變量
Begin
Plsql程序
End;
例:創(chuàng)建一個存儲過程,用于向數(shù)據(jù)庫中插入一條記錄。
第一步:創(chuàng)建
CREATE OR REPLACE PROCEDURE pro_1
IS
Begin
insert into person values (11,'aa','aav');
End;
第二步:在sql*plus中執(zhí)行該過程
exec pro_1;
第三步:通過JDBC使用存儲過程。
?private Connection conn = null;
?private ResultSet rs = null;
?private CallableStatement state = null;
?//調(diào)用一個無參數(shù)的存儲過程
?public void testPro()
?{
conn = Tools.getConnection();
try {
state = conn.prepareCall("{call pro_1}");
state.execute();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
?}
4 帶有IN類型參數(shù)的存儲過程的使用。
例:創(chuàng)建一個存儲過程,用于向數(shù)據(jù)庫中插入一條記錄。
第一步:創(chuàng)建
CREATE OR REPLACE PROCEDURE pro_2(id number,name varchar2,email varchar2)
IS
Begin
insert into person values (id,name,email);
End;
第二步:在sql*plus中執(zhí)行該過程
exec pro_2(12,'aaa','aaa');
第三步:通過JDBC使用存儲過程。
?//使用一個帶有 IN 類型參數(shù)的存儲過程
?public void testPro_in(int id,String name,String email)
?{
conn = Tools.getConnection();
try {
state = conn.prepareCall("{call pro_2(?,?,?)}");
state.setLong(1, id);
state.setString(2, name);
state.setString(3, email);
state.execute();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
?}
5 帶有out類型參數(shù)的存儲過程的使用。
例:創(chuàng)建一個存儲過程,用于返回數(shù)據(jù)庫中的Person表的總行數(shù)。
第一步:創(chuàng)建
CREATE OR REPLACE PROCEDURE pro_3(num out number)
IS
mynum number;
Begin
select count(*) into mynum from person;
num := mynum;
End;
或者
CREATE OR REPLACE PROCEDURE pro_3(num out number)
IS
Begin
select count(*) into num from person;
End;
第二步:在sql*plus中執(zhí)行該過程
declare
a number;
begin
pro_3(a);
dbms_output.put_line(a);
end;
第三步:通過JDBC使用存儲過程。
public void testPro_out()
?{
conn = Tools.getConnection();
try {
state = conn.prepareCall("{call pro_3(?)}");
state.registerOutParameter(1, Types.NUMERIC);
state.execute();
int num = state.getInt(1);
System.out.println(num);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
?}
6 帶有in-out類型參數(shù)的存儲過程的使用。
創(chuàng)建:
CREATE OR REPLACE PROCEDURE pro_4(num in out number)
IS
a number := 100;
Begin
num := a*num;
End;
在sql*plus中執(zhí)行該過程
declare
a number := 12;
begin
pro_4(a);
dbms_output.put_line(a);
end;
?
總結(jié)
以上是生活随笔為你收集整理的激动,新手第一次小试oracle的存储过程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java程序员从笨鸟到菜鸟之(七十五)细
- 下一篇: AP1242G胖转瘦,廋转胖