oracle怎么调用变量 oracle调用函数的语句

oracle 函数,解释变量的使用和调用,本人菜鸟刚学oracle , 看不懂函数间的使用,越详细越好declare 是定义的关键字,说明下面的部分是定义部分,一直到begin结束,begin到end之间是代码段 。
v_sum,v_num 是变量名,被声明为number类型 。
函数get_salary()声明了两个变量,一个返回值 。
oracle的参数有两种属性,in,out 。一般默认为in,就是传值的,out类型可以理解为c里面的形参,传地址一类的,声明为OUT属性的参数,可以把函数对参数的修改带出来 。
比如下面:
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;
调用
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;
那么输出应该是
v_var1=1
v_var2=2
v_var3=2
理解了out的含义,再看你的代码就容易了
因为函数申明emp_count为out,所以他将带出在函数中的变化 。
函数里有select count(*) into emp_count from .........样子的语句 。所以函数执行完成后这个变量的值其实是该部门的人数 。
写了这么长了啊 。。。。
不知道讲清楚了没 。
exption我就不解释了吧 。有其他问题请追问 。
个人对oracle也比较感兴趣 , 但现在的工作和这个不相关了,希望能一起进步 。有类似oracle的问题可以直接找我 。其实我不是大拿,要是想神马问题都马上得到答案请忽略这段话 。我汗?。?
oracle pl/sql中如何使用变量定义并使用变量
PL/SQL有四种类型:标量类型,复合类型,引用类型 (reference),LOB(Large Obejct)类型
一、标量类型
最常用的就是标量类型,是指只能存放单个数值的变量,包括数字类型、字符类型、日期类型和布尔类型,每种类型又包含相应的子类型 。
常量标量类型如下:
VARCHAR2 (n) , CHAR (n), NUMBER (p,s),DATE, TIMESTAMP , LONG , LONGRAW ,BOOLEAN,BINARY_INTEGER(仅 PL / SQL使用) , BINARY_FLOAT和BINARY_DOUBLE(10g新引入的)
定义标量:
identifier [CONSTANT] datatype [NOT NULL] [:=| DEFAULT expr]
使用标量需要注意的是=号被:=取代,与delphi一样的赋值符号@_@
例子:
v_nameVARCHAR2 ( 10 );
v_rate CONSTANTSNUMBER ( 4 , 2 ) : = 3.04 ;
为了防止定义的变量类型与表中的字段类型不一致 , 可以使用%TYPE来定义:
v_name employee.name % TYPE;
如上面所示,v_name的类型就与表 employee中的name字段类型一样?。?
二、复合变量:
用于存放多个值的变量称为复合变量,包括PL/SQL记录,PL/SQL表 , 嵌套表和VARRAY四种类型
1.PL/SQL记录
类似于C/C中的结构概念:
declare
TYPE employee_recordisRECORD(
id employee.id % TYPE,
name employee.name % TYPE,
email employee.email % TYPE);
em_record employee_record;
begin
selectid,name,emailintoem_recordfromemployeewherename = name;
dbms_output.put_line( ' 雇员名: ' || em_record.name || '雇员ID: ' || em_record.id);
end ;
2.PL/SQL表,类似于数组概念,不同的是PL/SQL表允许负值下标,而且没有上下限,如:
declare
TYPE employee_tableistableofemployee.name % TYPEindexbyBINaRY_INTEGER;
em_table employee_table;
begin
selectnameintoem_table( - 1 )fromemployeewherename = name;
dbms_output.put_line( ' 雇员名: ' || em_table( - 1 ));
end ;
3.嵌套表,与PL/SQL 表相似,不同的是嵌套表可以做表列的数据类型,而PL/SQL表不能,使用嵌套表作为表列时,必须为其指定专门的存储表,如:
createorreplaceTYPE emp_typeasOBJECT(nameVARCHAR2 ( 10 ),salaryNUMBER ( 6 , 2 ),hiredate DATE);
CREATEORREPLACETYPE emp_arrayISTABLEOFemp_type;
CREATETABLEdepartment(
deptnoNUMBER ( 2 ),dnameVARCHAR2 ( 10 ),
employee emp_array)NESTEDTABLEemployee STOREasemployee_dept;
4.VARRAY(变长数组),与嵌套表相似,也可以做为表列的数据类型,但是嵌套表没有个数限制,而VARRAY有个数限制,如:
CREATE TYPE TEST_ARRAY IS VARRAY(20) OF emp_type;
三、引用变量(reference)
类似于C中的指针或者JAVA中引用的概念,用于存放数值指针的变量,使用此变量,可以使得应用程序共享相同对象,降低占用空间 。此类有两种类型:游标(REF CURSOR)和对象类型(REF OBJECT)
1.REF CURSOR,定义时同时指定SELECT语句的游标称为显式或者静态游标,在打开时才指定SELECT语句的游标称为动态游标,如:
DECLARE
TYPE c1ISREFCURSOR ;
emp_cursor c1;
v_name employee.name % TYPE;
v_sal employee.salary % TYPE;
begin
openemp_cursorfor
SELECTname,salaryFROMEMPLOYEE ;
LOOP
FETCHemp_cursorINTOv_name,v_sal;
EXIT WHEN emp_cursor % NOTFOUND;
dbms_output.put_line(v_name);
ENDLOOP;
closeemp_cursor;
end ;
2.REF OBJECT,与JAVA的引用概念相同,存储的是指向对象的指针
四、LOB类型
LOB类型是指用于存储大批量数据的变量 , 包括内部的3种(CLOB,BLOB,NCLOB)和外部LOB(BFILE) 。
CLOB,NCLOB用于存储大量的字符数据 。
BLOB用于存储大批量二进制数据(如图象) 。
BFILE则存储指向OS文件的指针 。
Oracle 存储过程的动态变量如何使用实现思路:
第一步:先定义一个字符串,这个字符串SQL是由动态变量和其他的sql语句成分拼接组成 。
第二步:直接执行 execute immediate SQL;
备注:以上方法是oracle提供的动态执行方法语句,直接使用就可以 。
VAR_DYNAMIC_SQL := 'INSERT INTO RP_COMFIRMED_EVENT_DETAIL(EVENT_ID,--IDTRANS_TIME,--交易时间TRANS_TYPE,--交易类型TRANS_PROVINCE,--开户省份CCE_CSTNO,--客户号CCE_CERTTYPE,--证件类型CCE_CERTNO,--证件号CCE_AMT,--交易金额CCE_RISK_SCORE,--不处理的风险分值CCE_PAYEE_ACC,--付款人账号CCE_PAYEE_NAME,--付款人姓名CCE_REC_NODE,--收款人开户行CCE_REC_ACC,--收款人账号CCE_REC_NAME,--收款人姓名RULE_NAME,--规则名称CCE_RULE_NOTE,--规则描述SCORE_RANGE--处理后的风险分值)selectEVENT_ID,SYS_CREATION_DATE,GET_NAME_BY_CODE(GET_TOTAL_EVENT_TYPE(T1.EVENT_TYPE,T1.USER_DEFINED_EVENT_TYPE),''eventType'') AS TRANS_TYPE,-- get_province(IP_COUNTRY,IP_CITY) AS CCE_TRANSTYPE,get_vale_from_cd_p('||get_vale_from_cd1('13','5')||'),--开户省份为自定义字段USER_ID,'||get_vale_from_cd1('4','4')||',--证件类型为自定义字段'||get_vale_from_cd1('7','4')||',--证件号为自定义字段要转换成动态SQLGET_AMT_BY_CURRENCY(AMOUNT_ORIGINAL,AMOUNT_CURRENCY),--通过汇率和币种转换RISK_SCORE,USER_ACCT_NUMBER,'||get_vale_from_cd_g1(get_vale_from_cd_al)||',--付款人姓名'||get_vale_from_cd1('11','5')||',--收款人开户行 自定义字段 需转换成动态SQLEXT_ACCT_NUMBER,EXT_ACCT_OWNER_NAME,NVL(POLICY_RULE_ID,''FALLBACK_RULE'') AS RULE_NAME,SUBSTR(GET_RULE_ORDER_ID(ORG_ID,POLICY_RULE_ID),INSTR(GET_RULE_ORDER_ID(ORG_ID,POLICY_RULE_ID),''-'') 1),--描述GET_SCORE_RANGE(RISK_SCORE) AS RISK_SCORE_RANGEFROM EVENT_LOG_REALTIME T1))';execute immediate VAR_DYNAMIC_SQL;
oracle的存储过程里怎样调用动态变量实现思路:
第一步:先定义一个字符串,这个字符串SQL是由动态变量和其他的sql语句成分拼接组成 。
第二步:直接执行 execute immediate SQL;
备注:以上方法是oracle提供的动态执行方法语句,直接使用就可以 。
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,--交易时间
TRANS_TYPE,--交易类型
TRANS_PROVINCE,--开户省份
CCE_CSTNO,--客户号
CCE_CERTTYPE,--证件类型
CCE_CERTNO,--证件号
CCE_AMT,--交易金额
CCE_RISK_SCORE,--不处理的风险分值
CCE_PAYEE_ACC,--付款人账号
CCE_PAYEE_NAME,--付款人姓名
CCE_REC_NODE,--收款人开户行
CCE_REC_ACC,--收款人账号
CCE_REC_NAME,--收款人姓名
RULE_NAME,--规则名称
CCE_RULE_NOTE,--规则描述
SCORE_RANGE--处理后的风险分值
)select
【oracle怎么调用变量 oracle调用函数的语句】关于oracle怎么调用变量和oracle调用函数的语句的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读