快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

oracle怎么调用变量 oracle引用变量

oracle pl/sql中如何使用变量

定义并使用变量

创新互联建站成立与2013年,先为古蔺等服务建站,古蔺等地企业,进行企业商务咨询服务。为古蔺企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

PL/SQL有四种类型:标量类型,复合类型,引用类型 (reference),LOB(Large Obejct)类型

一、标量类型

最常用的就是标量类型,是指只能存放单个数值的变量,包括数字类型、字符类型、日期类型和布尔类型,每种类型又包含相应的子类型。

常量标量类型如下:

VARCHAR2 (n) , CHAR (n), NUMBER (p,s),DATE, TIMESTAMP , LONG , LONG RAW ,BOOLEAN,BINARY_INTEGER(仅 PL / SQL使用),BINARY_FLOAT和BINARY_DOUBLE(10g新引入的)

定义标量:

identifier [CONSTANT] datatype [NOT NULL] [:=| DEFAULT expr]

使用标量需要注意的是=号被:=取代,与delphi一样的赋值符号@_@

例子:

v_name VARCHAR2 ( 10 );

v_rate CONSTANTS NUMBER ( 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_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表,类似于数组概念,不同的是PL/SQL表允许负值下标,而且没有上下限,如:

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 表相似,不同的是嵌套表可以做表列的数据类型,而PL/SQL表不能,使用嵌套表作为表列时,必须为其指定专门的存储表,如:

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(变长数组),与嵌套表相似,也可以做为表列的数据类型,但是嵌套表没有个数限制,而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 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的引用概念相同,存储的是指向对象的指针

四、LOB类型

LOB类型是指用于存储大批量数据的变量,包括内部的3种(CLOB,BLOB,NCLOB)和外部LOB(BFILE)。

CLOB,NCLOB用于存储大量的字符数据。

BLOB用于存储大批量二进制数据(如图象)。

BFILE则存储指向OS文件的指针。

在ORACLE中,函数的调用方式分别是哪几种?

1、在SQL语句中直接调用,如:\x0d\x0aselect sysdate from dual;\x0d\x0a\x0d\x0a2、在PL/SQL代码中赋值给某个变量,如:\x0d\x0adeclare\x0d\x0a dt date :=null;\x0d\x0abegin\x0d\x0a dt := sysdate;\x0d\x0a ...\x0d\x0aend;\x0d\x0a/\x0d\x0a\x0d\x0a3、以上说的是Oracle内置函数,如果是自定义函数,则根据入口参数、出口参数的不同,调用方式不尽相同。

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,看不懂函数间的使用,越详细越好

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怎么调用变量 oracle引用变量
分享网址:http://6mz.cn/article/hgscci.html

其他资讯