declare 是定義的關(guān)鍵字,說明下面的部分是定義部分,一直到begin結(jié)束,begin到end之間是代碼段。
公司主營業(yè)務(wù):成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出襄陽免費(fèi)做網(wǎng)站回饋大家。
v_sum,v_num 是變量名,被聲明為number類型。
函數(shù)get_salary()聲明了兩個(gè)變量,一個(gè)返回值。
oracle的參數(shù)有兩種屬性,in,out。一般默認(rèn)為in,就是傳值的,out類型可以理解為c里面的形參,傳地址一類的,聲明為OUT屬性的參數(shù),可以把函數(shù)對(duì)參數(shù)的修改帶出來。
比如下面:
CREATE OR REPLACE
FUNCTION test(
v_var1 NUMBER,
v_var2 OUT NUMBER)
RETURN NUMBER IS
v_var1:=v_var1+1;
v_var2:=v_var2+1;
return v_var1;
調(diào)用
DECLARE
v_var1 NUMBER;
v_var2 NUMBER;
v_var3 NUMBER;
BEGIN
v_var1:=1;
v_var2:=1;
v_var3 :=test(v_var1, v_var2);
DBMS_OUTPUT.PUT_LINE('v_var1='||v_var1||'\nv_var2='||v_var2||'\nv_var3='||v_var3);
END;
那么輸出應(yīng)該是
v_var1=1
v_var2=2
v_var3=2
理解了out的含義,再看你的代碼就容易了
因?yàn)楹瘮?shù)申明emp_count為out,所以他將帶出在函數(shù)中的變化。
函數(shù)里有select count(*) into emp_count from .........樣子的語句。所以函數(shù)執(zhí)行完成后這個(gè)變量的值其實(shí)是該部門的人數(shù)。
寫了這么長了啊。。。。
不知道講清楚了沒。
exption我就不解釋了吧。有其他問題請(qǐng)追問。
個(gè)人對(duì)oracle也比較感興趣,但現(xiàn)在的工作和這個(gè)不相關(guān)了,希望能一起進(jìn)步。有類似oracle的問題可以直接找我。其實(shí)我不是大拿,要是想神馬問題都馬上得到答案請(qǐng)忽略這段話。我汗!!
1、在SQL語句中直接調(diào)用,如:\x0d\x0aselect sysdate from dual;\x0d\x0a\x0d\x0a2、在PL/SQL代碼中賦值給某個(gè)變量,如:\x0d\x0adeclare\x0d\x0a dt date :=null;\x0d\x0abegin\x0d\x0a dt := sysdate;\x0d\x0a ...\x0d\x0aend;\x0d\x0a/\x0d\x0a\x0d\x0a3、以上說的是Oracle內(nèi)置函數(shù),如果是自定義函數(shù),則根據(jù)入口參數(shù)、出口參數(shù)的不同,調(diào)用方式不盡相同。
定義并使用變量
PL/SQL有四種類型:標(biāo)量類型,復(fù)合類型,引用類型 (reference),LOB(Large Obejct)類型
一、標(biāo)量類型
最常用的就是標(biāo)量類型,是指只能存放單個(gè)數(shù)值的變量,包括數(shù)字類型、字符類型、日期類型和布爾類型,每種類型又包含相應(yīng)的子類型。
常量標(biāo)量類型如下:
VARCHAR2 (n) , CHAR (n), NUMBER (p,s),DATE, TIMESTAMP , LONG , LONG RAW ,BOOLEAN,BINARY_INTEGER(僅 PL / SQL使用),BINARY_FLOAT和BINARY_DOUBLE(10g新引入的)
定義標(biāo)量:
identifier [CONSTANT] datatype [NOT NULL] [:=| DEFAULT expr]
使用標(biāo)量需要注意的是=號(hào)被:=取代,與delphi一樣的賦值符號(hào)@_@
例子:
v_name VARCHAR2 ( 10 );
v_rate CONSTANTS NUMBER ( 4 , 2 ) : = 3.04 ;
為了防止定義的變量類型與表中的字段類型不一致,可以使用%TYPE來定義:
v_name employee.name % TYPE;
如上面所示,v_name的類型就與表 employee中的name字段類型一樣!!
二、復(fù)合變量:
用于存放多個(gè)值的變量稱為復(fù)合變量,包括PL/SQL記錄,PL/SQL表,嵌套表和VARRAY四種類型
1.PL/SQL記錄
類似于C/C++中的結(jié)構(gòu)概念:
declare
TYPE employee_record is RECORD(
id employee.id % TYPE,
name employee.name % TYPE,
email employee.email % TYPE);
em_record employee_record;
begin
select id,name,email into em_record from employee where name = name;
dbms_output.put_line( ' 雇員名: ' || em_record.name || ' 雇員ID: ' || em_record.id);
end ;
2.PL/SQL表,類似于數(shù)組概念,不同的是PL/SQL表允許負(fù)值下標(biāo),而且沒有上下限,如:
declare
TYPE employee_table is table of employee.name % TYPE index by BINaRY_INTEGER;
em_table employee_table;
begin
select name into em_table( - 1 ) from employee where name = name;
dbms_output.put_line( ' 雇員名: ' || em_table( - 1 ));
end ;
3.嵌套表,與PL/SQL 表相似,不同的是嵌套表可以做表列的數(shù)據(jù)類型,而PL/SQL表不能,使用嵌套表作為表列時(shí),必須為其指定專門的存儲(chǔ)表,如:
create or replace TYPE emp_type as OBJECT(name VARCHAR2 ( 10 ),salary NUMBER ( 6 , 2 ),hiredate DATE);
CREATE OR REPLACE TYPE emp_array IS TABLE OF emp_type;
CREATE TABLE department(
deptno NUMBER ( 2 ),dname VARCHAR2 ( 10 ),
employee emp_array)NESTED TABLE employee STORE as employee_dept;
4.VARRAY(變長數(shù)組),與嵌套表相似,也可以做為表列的數(shù)據(jù)類型,但是嵌套表沒有個(gè)數(shù)限制,而VARRAY有個(gè)數(shù)限制,如:
CREATE TYPE TEST_ARRAY IS VARRAY(20) OF emp_type;
三、引用變量(reference)
類似于C++中的指針或者JAVA中引用的概念,用于存放數(shù)值指針的變量,使用此變量,可以使得應(yīng)用程序共享相同對(duì)象,降低占用空間。此類有兩種類型:游標(biāo)(REF CURSOR)和對(duì)象類型(REF OBJECT)
1.REF CURSOR,定義時(shí)同時(shí)指定SELECT語句的游標(biāo)稱為顯式或者靜態(tài)游標(biāo),在打開時(shí)才指定SELECT語句的游標(biāo)稱為動(dòng)態(tài)游標(biāo),如:
DECLARE
TYPE c1 IS REF CURSOR ;
emp_cursor c1;
v_name employee.name % TYPE;
v_sal employee.salary % TYPE;
begin
open emp_cursor for
SELECT name,salary FROM EMPLOYEE ;
LOOP
FETCH emp_cursor INTO v_name,v_sal;
EXIT WHEN emp_cursor % NOTFOUND;
dbms_output.put_line(v_name);
END LOOP;
close emp_cursor;
end ;
2.REF OBJECT,與JAVA的引用概念相同,存儲(chǔ)的是指向?qū)ο蟮闹羔?/p>
四、LOB類型
LOB類型是指用于存儲(chǔ)大批量數(shù)據(jù)的變量,包括內(nèi)部的3種(CLOB,BLOB,NCLOB)和外部LOB(BFILE)。
CLOB,NCLOB用于存儲(chǔ)大量的字符數(shù)據(jù)。
BLOB用于存儲(chǔ)大批量二進(jìn)制數(shù)據(jù)(如圖象)。
BFILE則存儲(chǔ)指向OS文件的指針。
提供下思路,逐步測試看看,通過下面sql測試:若測試ok,則name變量類型或者賦值異常,若測試異常,則考慮函數(shù)實(shí)現(xiàn)是否有異常
for:
declare
begin
dbms_output.putline(max_int(1,'aaaaaaa'));
end;
oracle
也是大同小異的,以下給你一個(gè)例子!
SQL
set
serveroutput
on;
SQL
SQL
declare
2
dt
date;
3
str
varchar2(10);
4
begin
5
dt
:=
to_date('2015-07-01','yyyy-mm-dd');
6
select
1
into
str
from
dual
where
sysdate
dt;
7
dbms_output.put_line(str);
8
end;
9
/
1
PL/SQL
procedure
successfully
completed
實(shí)現(xiàn)思路:
第一步:先定義一個(gè)字符串,這個(gè)字符串SQL是由動(dòng)態(tài)變量和其他的sql語句成分拼接組成。
第二步:直接執(zhí)行 execute immediate SQL;
備注:以上方法是oracle提供的動(dòng)態(tài)執(zhí)行方法語句,直接使用就可以。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
VAR_DYNAMIC_SQL := 'INSERT INTO RP_COMFIRMED_EVENT_DETAIL(
EVENT_ID,--ID
TRANS_TIME,--交易時(shí)間
TRANS_TYPE,--交易類型
TRANS_PROVINCE,--開戶省份
CCE_CSTNO,--客戶號(hào)
CCE_CERTTYPE,--證件類型
CCE_CERTNO,--證件號(hào)
CCE_AMT,--交易金額
CCE_RISK_SCORE,--不處理的風(fēng)險(xiǎn)分值
CCE_PAYEE_ACC,--付款人賬號(hào)
CCE_PAYEE_NAME,--付款人姓名
CCE_REC_NODE,--收款人開戶行
CCE_REC_ACC,--收款人賬號(hào)
CCE_REC_NAME,--收款人姓名
RULE_NAME,--規(guī)則名稱
CCE_RULE_NOTE,--規(guī)則描述
SCORE_RANGE--處理后的風(fēng)險(xiǎn)分值
)select
本文名稱:oracle變量怎么調(diào)用 oracle如何定義變量
標(biāo)題URL:http://chinadenli.net/article38/hgdosp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、網(wǎng)站營銷、移動(dòng)網(wǎng)站建設(shè)、品牌網(wǎng)站制作、軟件開發(fā)、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)