日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

激动,新手第一次小试oracle的存储过程

發(fā)布時(shí)間:2024/9/20 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 激动,新手第一次小试oracle的存储过程 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

之前一直寫觸發(fā)器,期間一直接觸和聽說了存儲(chǔ)過程,好多天過去了,今天才第一次使用了存儲(chǔ)過程。

一,問題提出:http://zhidao.baidu.com/question/113921713.html

求一個(gè)oracle程序塊,循環(huán)插入A表一百行數(shù)據(jù).

就是定義一個(gè)變量,然后讓人他循環(huán)一百次,往數(shù)據(jù)庫里插入數(shù)據(jù). 插入的行只有一列是不一樣的,就是這個(gè)變量,其它一樣.請問如何寫. 表結(jié)構(gòu)就二列.一個(gè)是放這個(gè)變量 a列,一個(gè)是名稱列.create table A (a numeric,b varchar2(50) ) 有會(huì)的請賜教 ,謝謝

二,解決過程

1,創(chuàng)建表,需要在plsql中的command窗口

create table e (a numeric,b varchar2(50) );

2,創(chuàng)建存儲(chǔ)過程,在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)用存儲(chǔ)過程exec,注意調(diào)用成功之后,需要按下plsql的“寫入”按鈕,和使用update之后commit寫入一樣。

4,執(zhí)行之后的e表,100條記錄出來了。

三,oracle存儲(chǔ)過程詳解。轉(zhuǎn)自http://blog.163.com/study_notes/blog/static/17610324320118610611676/

存儲(chǔ)過程
1 什么是存儲(chǔ)過程?
?用于在數(shù)據(jù)庫中完成特定的操作或者任務(wù)。是一個(gè)PLSQL程序塊,可以永久的保存在數(shù)據(jù)庫中以供其他程序調(diào)用。

2 存儲(chǔ)過程的參數(shù)模式


存儲(chǔ)過程的參數(shù)特性:
?IN類型的參數(shù)?OUT類型的參數(shù)?IN-OUT類型的參數(shù)
值被?傳遞給子程序?返回給調(diào)用環(huán)境?傳遞給子程序
返回給調(diào)用環(huán)境
參數(shù)形式?常量?未初始化的變量?初始化的變量
使用時(shí)?默認(rèn)類型?必須明確指定?必須明確指定


3 無參數(shù)存儲(chǔ)過程的使用:
CREATE OR REPLACE PROCEDURE 過程名 [(parameter,...)]
IS
定義變量
Begin
Plsql程序
End;

例:創(chuàng)建一個(gè)存儲(chǔ)過程,用于向數(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使用存儲(chǔ)過程。
?private Connection conn = null;
?private ResultSet rs = null;
?private CallableStatement state = null;
?//調(diào)用一個(gè)無參數(shù)的存儲(chǔ)過程
?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ù)的存儲(chǔ)過程的使用。
例:創(chuàng)建一個(gè)存儲(chǔ)過程,用于向數(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使用存儲(chǔ)過程。
?//使用一個(gè)帶有 IN 類型參數(shù)的存儲(chǔ)過程
?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ù)的存儲(chǔ)過程的使用。
例:創(chuàng)建一個(gè)存儲(chǔ)過程,用于返回?cái)?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使用存儲(chǔ)過程。
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ù)的存儲(chǔ)過程的使用。
創(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。