當前位置:首頁 » 存儲配置 » oracle存儲過程使用

oracle存儲過程使用

發布時間: 2022-07-25 13:28:36

A. oracle 資料庫 怎麼執行存儲過程

一。 概述Oracle存儲過程開發的要點是:
1; 使用Notepad文本編輯器,用Oracle PL/sql編程語言寫一個存儲過程;
2; 在Oracle資料庫中創建一個存儲過程;
3; 在Oracle資料庫中使用SQL*Plus工具運行存儲過程;
4; 在Oracle資料庫中修改存儲過程;
5; 通過編譯錯誤調試存儲過程;
6; 刪除存儲過程;二。環境配置
包括以下內容:
1; 一個文本編輯器Notepad;
2; Oracle SQL*Plus工具,提交Oracle SQL和PL/SQL 語句到Oracle database。
3; Oracle 10g express資料庫,它是免費使用的版本;
需要的技巧:
4; SQL基礎知識,包括插入、修改、刪除等
5; 使用Oracle's SQL*Plus工具的基本技巧;
6; 使用Oracle's PL/SQL 編程語言的基本技巧;三。寫一個存儲過程
在Notepad, 寫下:
CREATE OR REPLACE PROCEDURE skeletonISBEGINNULL;END;把文件存為skeleton.sql.
讓我們一行行遍歷這個存儲過程:
1 CREATE OR REPLACE PROCEDURE skeleton2 IS3 BEGIN
4 NULL;5 END;行1:CREATE OR REPLACE PROCEDURE 是一個SQL語句通知Oracle資料庫去創建一個叫做skeleton存儲過程, 如果存在就覆蓋它;行2:IS關鍵詞表明後面將跟隨一個PL/SQL體。
行3:BEGIN關鍵詞表明PL/SQL 體的開始。
四。創建一個存儲過程
SQL語句CREATE OR REPLACE PROCEDURE在Oracle資料庫中創建、編譯和保存一個存儲過程。
從Window打開SQL*Plus並且從SQL*Plus 登錄到你的資料庫;打開skeleton.sql文件。
在SQL命令提示符下輸入以下命令:
SQL@skeletonSQL/SQL*Plus裝載skeleton.sql文件的內容到 SQL*Plus緩沖區並且執行SQL*Plus語句;SQL*Plus 會通知你存儲過程已經被成功地創建。

B. oracle 存儲過程使用

使用存儲過程返回Oracle的結果集比較麻煩,必須要建包,並且聲明游標類型,Java中的ResultSet實際上就是資料庫的游標
例子
sql:
create or replace package pkg_1 as

type cursorType is ref cursor;

procere getDept(
rs out cursorType) ;

end pkg_1;

create or replace package body pkg_1 as

procere getDept(
rs out cursorType)
as
begin
open rs for
select * FROM dept ;
end getDept;
end pkg_1;

連接類
public class DBHelper {
private static String driver = "oracle.jdbc.driver.OracleDriver";

private static String url = "jdbc:oracle:thin:@localhost:1521:SVSE";

private static String user = "scott";

private static String password = "tiger";

public static Connection getConnection() {
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
// TODO 自動生成 catch 塊
e.printStackTrace();
}

Connection conn = null;
try {
conn = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
// TODO 自動生成 catch 塊
e.printStackTrace();
}
return conn;
}

}

訪問存儲過程的代碼

String sql = "{call pkg_1.getDept(?)}";
Connection conn = DBHelper.getConnection();
try {
CallableStatement cstmt = conn.prepareCall(sql);
cstmt.registerOutParameter(1, OracleTypes.CURSOR);
cstmt.execute();
ResultSet rs = (ResultSet) cstmt.getObject(1);
while (rs.next()) {
System.out.print(rs.getString(1));
System.out.print("\t");
System.out.print(rs.getString(2));
System.out.print("\t");
System.out.println(rs.getString(3));
}
} catch (SQLException e) {
// TODO 自動生成 catch 塊
e.printStackTrace();
}

C. oracle存儲過程的怎麼用

導出dmp需要用exp程序(一般是命令行調用,可用exp help=y查看相關參數),其他的東西可以在存儲過程中實現
Create Or Replace Procere SP_Shujuzhuanyi Is
Begin
Insert Into NewTable
Select * From OldTable Where dt < Trunc(SysDate) - 20;

Delete From OldTable Where dt < Trunc(SysDate) - 20;
End;
執行完存儲過程導出數據成dmp文件,再清空新的表,應該就是這樣了

D. 請問oracle怎麼執行存儲過程

我試驗過了,就是exec 存儲過程名或者execute 存儲過程名(參數),請你在仔細確認一下,你的存儲過程名寫沒寫對呀,或者你沒有進入sqlplus中?

----
以上,希望對你能有幫助。

E. 如何在oracle中使用存儲過程!

舉例說明吧:
例如:把scott用戶下emp表的雇員薪水sal小於1500的,統一上調30% 。相應的存儲過程是:
create or replace procere emp_sal is
type emp_cursor is ref cursor;
test_cursor emp_cursor;
v_empno number(10);
v_sal emp.sal%type;
begin
open test_cursor for select empno,sal from emp;
loop
fetch test_cursor into v_empno,v_sal;
exit when test_cursor%notfound;
if v_sal<1500 then
update emp set sal=sal*1.3 where empno=v_empno;
end if;
end loop;
end;

操作步驟:
1. 在「運行」中輸入cmd或command
2. sqlplus /nolog
3. conn / as sysdba
4. 將上述存儲過程粘貼過來並執行。
5. commit

F. ORACLE存儲過程怎麼調用

在sqlplus中:
SQL>execute [包名.]過程名(參數列表); --然後回車即可

在其他過程或函數中,直接調用就行了。

G. oracle中的存儲過程,有什麼作用,以及怎麼在代碼中使用

定義:存儲過程(Stored Procere )是一組為了完成特定功能的SQL 語句
集,經編譯後存儲在資料庫中。用戶通過指定存儲過程的名字並給出參數
(如果該存儲過程帶有參數)來執行它。存儲過程是資料庫中的一個重要
對象,任何一個設計良好的資料庫應用程序都應該用到存儲過程。
存儲過程是由流控制和SQL 語句書寫的過程,這個過程經編譯和優化後
存儲在資料庫伺服器中,應用程序使用時只要調用即可。在ORACLE 中,
若干個有聯系的過程可以組合在一起構成程序包。

優點:存儲過程只在創造時進行編譯,以後每次執行存儲過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用存儲過程可提高資料庫執行速度。
2.當對資料庫進行復雜操作時(如對多個表進行Update、Insert、Query、Delete時),可將此復雜操作用存儲過程封裝起來與資料庫提供的事務處理結合一起使用。
3.存儲過程可以重復使用,可減少資料庫開發人員的工作量。
4.安全性高,可設定只有某用戶才具有對指定存儲過程的使用權。
proc = connection.prepareCall("{ call SIM_MEDICARE.P_Isinblacklist(?,?,?,?,?) }");
proc.setString(1, 「」);設置傳入參數
proc.registerOutParameter(4, Types.VARCHAR);注冊傳出參數
proc.execute();執行過程
proc.getString(4)獲取結果

H. 如何使用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';

I. oracle資料庫調用存儲過程

這個需要分情況的
如果是在應用程序(Java等)中調用存儲過程,需要根據相應語言的語法來進行。這個可以通過查找相應語言的幫助來找到。
如果是在Oracle的其他存儲過程中調用,直接寫存儲過程名就可以了。傳入相應的參數,即可執行。
如果在Oracle的命令行中,使用EXEC
存儲過程名(參數)
的方式即可調用。
如果存儲過程執行的語句寫在SQL文件中,則可以通過調用文件的方式執行,即
SQL>
@D:\SQL\example.sql的形式

熱點內容
造夢西遊4兌換密碼多少 發布:2024-07-03 20:50:56 瀏覽:196
分布式存儲dapp 發布:2024-07-03 20:47:52 瀏覽:637
硬碟解壓顯示內存不足 發布:2024-07-03 20:37:03 瀏覽:812
php7和5 發布:2024-07-03 20:30:43 瀏覽:207
組件化編譯是什麼 發布:2024-07-03 19:43:34 瀏覽:939
編程新年 發布:2024-07-03 19:38:45 瀏覽:936
客戶伺服器結構的特點是什麼 發布:2024-07-03 19:32:50 瀏覽:777
安卓怎麼檢查後台調用歷史 發布:2024-07-03 19:16:55 瀏覽:388
安卓怎麼有iphone狀態欄 發布:2024-07-03 19:15:30 瀏覽:979
天准備編程 發布:2024-07-03 19:14:53 瀏覽:783