ORACLE PL/SQL 变量的使用

变量的使用

PL/SQL变量

变量的作用:

(在DECLARE阶段被声明)

(*每一行只声明一个变量)

(在执行阶段被赋予新值)

(可以在PL/SQL之间传递值)

(通过标准输出包可以看到结果)


变量初始化和关键字:

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

[CONSTANT] 必须初始化,并且其值不能改变

[NOT NULL] 必须初始化,不能被赋予NULL值

:= 赋值操作符

DEFAULT 赋值


1.标量类型

declare

v_city varchar2(30) NOT NULL := 'Beijing';

v_location varchar2(13) := 'Atlanta';

v_deptno number(2) NOT NULL := 10;

v_mgr number(6) DEFAULT 100;

v_hiredate date;

v_date date := to_date('20110117','yyyymmdd');

v_rowid rowid;

b_flag boolean;

begin

null;

end;

/


使用PL/SQL变量的注意事项:


PL/SQL变量和数据库标量的长度有区别:

CHAR 32767BYTE O8DATABASE 2000BYTE O7DATABASE 256BYTE

VARCHAR2 32767BYTE O8DATABASE 4000BYTE O7DATABASE 2000BYTE

LONG 32760BYTE 2G

LONG RAW 32760BYTE 2G


列名的优先级别高于变量!

declare

ename varchar2(20) :='KING';

begin

delete emp where ename=ename;

end;

/


变量输出测试:

例题1:创建一个匿名PL/SQL块,将下列字符输出到屏幕:"today is : 在此处显示当前时间"


set serveroutput on

begin

dbms_output.put_line('today is : '||sysdate);

end;

/


2.复合类型变量

数组:

declare

type no_list is varray (3) of number;

x no_list :=no_list(1990,2010,1995);

begin

dbms_output.put_line('no_list 2 is:'||x(2));

dbms_output.put_line('no_list 1 is:'||x(1));

dbms_output.put_line('no_list 3 is:'||x(3));

end;

/


记录(record):

declare

--第一个变量声明

v_sal number(7,2);

--第二个变量声明

TYPE emp_record_type IS RECORD

(ename VARCHAR2(25),

job VARCHAR2(10),

sal NUMBER(7,2));

emp_record emp_record_type;

begin

emp_record.ename := 'Alvin';

emp_record.job := 'clerk';

emp_record.sal := 1000;

dbms_output.put_line(emp_record.ename||' '||emp_record.job||' '||emp_record.sal);

end;

/


声明一个变量用来保存dept表的所有列的数据!


PL/SQL表(INDEX BY表):

declare

type emp_table_type is table of varchar2(20)

index by binary_integer;

emp_table emp_table_type;

begin

emp_table(0) :='Alex';

emp_table(-1) :='X1';

emp_table(2) :='hello';

dbms_output.put_line('index 0 : '||emp_table(0));

dbms_output.put_line('index -1 : '||emp_table(-1));

dbms_output.put_line('index 2 : '||emp_table(2));

end;

/


操作集合类型变量的方法:

declare

type emp_table_type is table of varchar2(10)

index by varchar2(10);

emp_table emp_table_type;

begin

emp_table('A') := 'KING';

emp_table('B') := 'zjz';


dbms_output.put_line('PL/SQL table elements numbers : '||emp_table.count);

dbms_output.put_line('The first element index --> '||emp_table.first);

dbms_output.put_line('The last element index --> '||emp_table.last);

dbms_output.put_line('The index ''B'' prior element is --> '||emp_table.prior('B'));

dbms_output.put_line('The index ''A'' next element is --> '||emp_table.next('A'));


if emp_table.exists('A') then

dbms_output.put_line('Index value ''A'' exists');

dbms_output.put_line('Index A --> '||emp_table('A'));

end if;


dbms_output.put_line('Index B --> '||emp_table('B'));

end;

/


PL/SQL表+record :

declare

TYPE emp_record_type IS RECORD

(ename VARCHAR2(25),

job VARCHAR2(10),

sal NUMBER(7,2));


type emp_table_type is table of emp_record_type

index by binary_integer;

emp_table emp_table_type;

begin

select ename,job,sal into emp_table(0) from emp where empno=7369;

dbms_output.put_line('index 0 : '||emp_table(0).ename);

emp_table(1).ename:='x';

dbms_output.put_line('index 1 : '||emp_table(1).ename);

end;

/

主机变量

第二类:非PL/SQL变量(来源于环境或宿主语言如C,java)


VARIABLE return_code NUMBER


variable g_message VARCHAR2(30)

begin

:g_message := 'My First PL/SQL Block!';

end;

/


--在SQLPUS中用print命令可以显示主机变量的值

print g_message


你可能感兴趣的:(oracle,变量,pl/sql)