激动,新手第一次小试oracle的存储过程
之前一直寫觸發器,期間一直接觸和聽說了存儲過程,好多天過去了,今天才第一次使用了存儲過程。
一,問題提出:http://zhidao.baidu.com/question/113921713.html
求一個oracle程序塊,循環插入A表一百行數據.
就是定義一個變量,然后讓人他循環一百次,往數據庫里插入數據. 插入的行只有一列是不一樣的,就是這個變量,其它一樣.請問如何寫. 表結構就二列.一個是放這個變量 a列,一個是名稱列.create table A (a numeric,b varchar2(50) ) 有會的請賜教 ,謝謝二,解決過程
1,創建表,需要在plsql中的command窗口
create table e (a numeric,b varchar2(50) );2,創建存儲過程,在plsql中,和trigger的創建方式差不多。
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窗口調用存儲過程exec,注意調用成功之后,需要按下plsql的“寫入”按鈕,和使用update之后commit寫入一樣。
4,執行之后的e表,100條記錄出來了。
三,oracle存儲過程詳解。轉自http://blog.163.com/study_notes/blog/static/17610324320118610611676/存儲過程
1 什么是存儲過程?
?用于在數據庫中完成特定的操作或者任務。是一個PLSQL程序塊,可以永久的保存在數據庫中以供其他程序調用。
2 存儲過程的參數模式
存儲過程的參數特性:
?IN類型的參數?OUT類型的參數?IN-OUT類型的參數
值被?傳遞給子程序?返回給調用環境?傳遞給子程序
返回給調用環境
參數形式?常量?未初始化的變量?初始化的變量
使用時?默認類型?必須明確指定?必須明確指定
3 無參數存儲過程的使用:
CREATE OR REPLACE PROCEDURE 過程名 [(parameter,...)]
IS
定義變量
Begin
Plsql程序
End;
例:創建一個存儲過程,用于向數據庫中插入一條記錄。
第一步:創建
CREATE OR REPLACE PROCEDURE pro_1
IS
Begin
insert into person values (11,'aa','aav');
End;
第二步:在sql*plus中執行該過程
exec pro_1;
第三步:通過JDBC使用存儲過程。
?private Connection conn = null;
?private ResultSet rs = null;
?private CallableStatement state = null;
?//調用一個無參數的存儲過程
?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類型參數的存儲過程的使用。
例:創建一個存儲過程,用于向數據庫中插入一條記錄。
第一步:創建
CREATE OR REPLACE PROCEDURE pro_2(id number,name varchar2,email varchar2)
IS
Begin
insert into person values (id,name,email);
End;
第二步:在sql*plus中執行該過程
exec pro_2(12,'aaa','aaa');
第三步:通過JDBC使用存儲過程。
?//使用一個帶有 IN 類型參數的存儲過程
?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類型參數的存儲過程的使用。
例:創建一個存儲過程,用于返回數據庫中的Person表的總行數。
第一步:創建
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中執行該過程
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類型參數的存儲過程的使用。
創建:
CREATE OR REPLACE PROCEDURE pro_4(num in out number)
IS
a number := 100;
Begin
num := a*num;
End;
在sql*plus中執行該過程
declare
a number := 12;
begin
pro_4(a);
dbms_output.put_line(a);
end;
?
總結
以上是生活随笔為你收集整理的激动,新手第一次小试oracle的存储过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java程序员从笨鸟到菜鸟之(七十五)细
- 下一篇: AP1242G胖转瘦,廋转胖