當前位置:首頁 » 存儲配置 » oracle存儲過程與或

oracle存儲過程與或

發布時間: 2022-07-03 00:08:53

Ⅰ oracle 存儲過程

create table dept
(deptno number,
dname varchar2(20),
loc varchar2(20)
)
1.如果你是取出單個的,你可以定義一個或者多個變數,將取出的值賦給變數
例如:

create or replace procere dept_procere(a in varchar2)
is
v_no number;
v_a varchar2(20);
begin
select a.deptno,a.loc into v_no,v_a
from dept a
where a.dname=a;
dbms_output.put_line('學號為:'||v_no||);
end;
2.如果你取出的是一個結果集,你可以用游標(一個簡單的例子)
create or replace procere dept_procere(a in varchar2,v_a out dept%rowtype)
is
--聲明游標
cursor c_de(a in varchar2)
is select * from dept where dname=a;
begin
--打開游標,對其中找到的記錄進行遍歷
open c_de(a);
loop
fetch c_de into v_a;
exit when c_de%notfound;
end loop;
close c_de;
dbms_output.put_line('deptno:'||v_a.deptno);
dbms_output.put_line('dname:'||v_a.dname);
dbms_output.put_line('loc:'||v_a.loc);
end;

3.可注意:在創建存儲過程的時候加上or replace,如果遇到重名的存儲過程將替換掉!
4.定義變數後面記得加上分號
5.oracle中可以對它直接賦值,可不用set, v_a:='a';
(6.給變數賦值的時候注意它的數據類型 a要單引號)
7.如果你這存儲過程是將參數賦值給一個你定義的變數的話,那這樣你不覺得是多此一舉么?一般將參數賦值給你定義的變數的話,可以進行數據類型轉換!可在此存儲過程中,沒發現它的用處
8.你取出來的數據,要放在變數或是游標中,顯示出來,不然你寫出來的存儲過程有什麼用呢?所以 select ...into ...

Ⅱ oracle資料庫存儲過程和方法問題

用動態的sql就行了

1. 先把輸入的表名,拼寫成"select * from <表>"
2. prepare a for <SQL語句>
3. declare cursor for a;
4. open cursor ...
5. fetch records...
6. close cursor...

end.

Ⅲ oracle中函數和存儲過程的區別和聯系

  1. 函數有1個返回值,而存儲過程可以有多個或者沒有。

  2. 函數可以在其他語句中直接調用,而存儲過程必須單獨調用。

  3. 函數通常用於計算或較為單一的數據功能,存儲過程相對完成更復雜的復合性的數據功能。

  4. 最關鍵普通語句每次執行都要編譯,而存儲過程只在創建時編譯之後直接調用,速度更快,在大數據復雜功能時尤其明顯。

  5. 存儲過程還可以指定用戶許可權。

Ⅳ oracle怎麼執行存儲過程

sqlplus或者PL/SQL
SQL窗口
輸入(單獨調用存儲過程):
無參數
EXEC
過程名;
或者
BEGIN
過程名
END;
IN
參數
EXEC
過程名(入參數..);
或者
BEGIN
過程名(入參數...)
END;
OUT參數,IN
OUT參數
variable
綁定變數名
數據類型;
//定義一個變數接收出參數的值;
EXEC
過程名(:綁定變數名);

Ⅳ oracle 傳參 存儲過程 或 函數

create or replace procere my_pro(ch out varchar2) is
cou integer;
cou
begin
ch:='';
cou:=0;
for cx in (select * from 檢查表) loop
select count(1) into cou from 參照表 where 參照表欄位=cx.檢查表的欄位;
if(cou=0)
ch:=ch||『,』||cx.檢查表的欄位;
end loop;
end my_pro;
這樣不知道滿足嗎?你把上面的表和欄位改成你的表的;試試可以嗎 我沒執行過

Ⅵ oracle存儲過程並且怎麼寫

存儲過程(procere):是一個命名了的語句塊,可以有0個或多個參數

語法:

create or replace procere HelloWorld
as
begin
dbms_output.put_line('HelloWorld');
end;

調用存儲過程
* 命令調用 exec helloworld
* 語句塊調用
begin
helloworld;
end;
/

DELETE:

create or replace procere del_emp01
is
begin
delete from emp01 where empno=7369;
end;

exec del_emp01;

create or replace procere del_emp01(v_empno in emp01.empno%type)
is
begin
delete from emp01 wherer empno=v_empno;
end;

exec del_emp01(7521);

INSERT

create or replace procere ins_emp01
(v_empno emp01.empno%type,v_ename emp01.ename%type)
as
begin
insert into emp01(empno,ename) values(v_empno,v_ename);
end;

exec ins_emp01(1000,'李四');

UPDATE

create or replace procere upd_emp01
(v_empno emp01.empno%type,v_ename emp01.ename%type)
as
begin
update emp01 set ename=v_ename where empno=v_empno;
end;

exec upd_emp01(1000,'張三');

SELECT
create or replace procere sel_emp01
(v_empno emp01.empno%type,v_emp01_data out emp01%rowtype)
as
begin
select * into v_emp01_data from emp where empno=v_empno;
end;

帶有輸出參數的存儲過程不能使用命令直接調用

只能由語句塊或程序調用(JAVA) ****************************************************************
declare
v_emp_data emp01%rowtype;
begin
sel_emp01(7499,v_emp_data);
dbms_output.put_line(v_emp_data.ename||' '||v_emp_data.sal);
end;
調用:
declare
v_emp_data emp01%rowtype;
begin
sel_emp01(7499,v_emp_data);
dbms_output.put_line(v_emp_data.ename||' '||v_emp_data.sal);
end;
使用scott用戶登錄
統計某個部門的員工的工資總和,員工的人數,平均工資,創建存儲過程
create or replace procere deptcount
(v_deptno emp.deptno%type,v_sal_sum out number,v_recordes out number,v_avg_sal out number,errorMsg out varchar2)
is
begin
select sum(sal) into v_sal_sum from emp group by deptno having deptno=v_deptno;
select count(*) into v_recordes from emp group by deptno having deptno=v_deptno;
select avg(sal) into v_avg_sal from emp group by deptno having deptno=v_deptno;
exception
when no_data_found then
errorMsg:='沒有該部門';
end;
調用:
declare
v_sal_sum number;
v_recordes number;
v_avg_sal number(8,2);
v_errormsg varchar2(20);
begin
deptcount(90,v_sal_sum,v_recordes,v_avg_sal,v_errormsg);
dbms_output.put_line(v_sal_sum||' '||v_recordes||' '||v_avg_sal);
dbms_output.put_line(v_errormsg);
end;

//輸出參數
create or replace procere my_pro(v_num in number,v_result out number)
is
v_temp number;
begin
v_temp:=0;
for i in 1..v_num
loop
v_temp:=v_temp+i;
end loop;
v_result:=v_temp;
end;
declare
v_recieve number;
begin
my_pro(100,v_recieve);
dbms_output.put_line(v_recieve);
end;
//既是輸入參數又是輸出參數
create or replace procere my_pro1(v_i in out number)
is
v_j number;
begin
v_j:=30;
v_i:=v_i*v_j;
end;

declare
v_t number;
begin
v_t:=20;
my_pro1(v_t);
dbms_output.put_line(v_t);
end;

Ⅶ 關於Oracle的存儲過程

1.基本結構
CREATE OR REPLACE PROCEDURE 存儲過程名字
(
參數1 IN NUMBER,
參數2 IN NUMBER
) IS
變數1 INTEGER :=0;
變數2 DATE;
BEGIN

END 存儲過程名字

2.SELECT INTO STATEMENT
將select查詢的結果存入到變數中,可以同時將多個列存儲多個變數中,必須有一條
記錄,否則拋出異常(如果沒有記錄拋出NO_DATA_FOUND)
例子:
BEGIN
SELECT col1,col2 into 變數1,變數2 FROM typestruct where xxx;
EXCEPTION
WHEN NO_DATA_FOUND THEN
xxxx;
END;
...

3.IF 判斷
IF V_TEST=1 THEN
BEGIN
do something
END;
END IF;

4.while 循環
WHILE V_TEST=1 LOOP
BEGIN
XXXX
END;
END LOOP;

5.變數賦值
V_TEST := 123;

6.用for in 使用cursor
...
IS
CURSOR cur IS SELECT * FROM xxx;
BEGIN
FOR cur_result in cur LOOP
BEGIN
V_SUM :=cur_result.列名1+cur_result.列名2
END;
END LOOP;
END;

7.帶參數的cursor
CURSOR C_USER(C_ID NUMBER) IS SELECT NAME FROM USER WHERE TYPEID=C_ID;
OPEN C_USER(變數值);
LOOP
FETCH C_USER INTO V_NAME;
EXIT FETCH C_USER%NOTFOUND;
do something
END LOOP;
CLOSE C_USER;

Ⅷ oracle函數和存儲過程有什麼區別

一、主體不同

1、函數:當需要分析數據清單中的數值是否符合特定條件時,使用資料庫工作表函數。

2、存儲過程:是在大型資料庫系統中,一組為了完成特定功能的SQL 語句集,存儲在資料庫中,一次編譯後永久有效。

二、特點不同

1、函數:只能返回一個變數,可以嵌入sql中和存儲過程中使用。

2、存儲過程:用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行。存儲過程是資料庫中的一個重要對象。在數據量特別龐大的情況下利用存儲過程能達到倍速的效率提升。


三、功能不同

1、函數:不能用臨時表,只能用表變數,函數不能執行一組修改全局資料庫狀態的操作。可以作為查詢語句的一個部分來調用,由於函數可以返回一個表對象,所以在查詢中位於from關鍵字後面。

2、存儲過程:存儲過程需要讓sql的query可以執行,存儲過程可以返回參數,如記錄集。sql語句中不可以含有存儲過程。


熱點內容
大學php開發培訓 發布:2024-04-20 08:04:35 瀏覽:987
小米2s存儲設置 發布:2024-04-20 07:58:38 瀏覽:900
株洲移動網路伺服器地址 發布:2024-04-20 07:45:48 瀏覽:689
119濃度的鹽酸怎麼配置 發布:2024-04-20 06:23:38 瀏覽:119
資料庫pf 發布:2024-04-20 05:57:36 瀏覽:393
c語言編譯出現連接錯誤 發布:2024-04-20 05:42:18 瀏覽:198
湖北戴爾伺服器維修系統雲主機 發布:2024-04-20 05:36:47 瀏覽:62
android上傳數據 發布:2024-04-20 05:36:43 瀏覽:143
python替換文本內容 發布:2024-04-20 05:21:22 瀏覽:899
urllib3源碼 發布:2024-04-20 05:11:23 瀏覽:35