本文共 3367 字,大约阅读时间需要 11 分钟。
1、变量和常量变量语法: variable_name data_type [[NOT NULL] [:=VALUE]] 说明:NOT NULL对变量定义非空约束,必须为变量赋非空的初始值,并且不允许在任何时候将其值修改为NULL。
--变量样例:
1 2 3 4 5 6 7 8 | SQL>SERVEROUT ON SQL> DECLARE v_num NUMBER(4); BEGIN v_num:=20; DBMS_OUTPUT.PUT_LINE( '变量名v_num的值为:' ||v_num); END ; / |
常量语法: constant_name CONSTANT data_type [:=VALUE]
--常量样例:
1 2 3 4 5 | DECLARE c_num CONSTANT NUMBER(4):=100; BEGIN DBMS_OUTPUT.PUT_LINE( '常量名c_num的值为:' ||c_num); END ; |
2、复合数据类型
2.1 %TYPE类型
引用某个变量或者数据库的列的类型作为某变量的数据类型。
1 2 3 4 5 6 7 8 9 10 | SET SERVEROUT ON DECLARE v_ename scott.emp.ename%TYPE; v_sal1 number(11); v_sal2 v_sal1%TYPE; BEGIN SELECT ename,sal INTO v_ename,v_sal1 FROM scott.emp WHERE empno=7369; v_sal2:=v_sal1; DBMS_OUTPUT.PUT_LINE(v_ename|| '的工资是' ||v_sal2); END ; |
2.2 %ROWTYPE
引用数据库表中的一行作为数据类型,即RECORD类型(记录类型),是PL/SQL的附加类型。表示一条记录,相当于JAVA中的对象。可以使用“.”来访问记录中的属性。
1 2 3 4 5 6 7 8 9 10 11 12 13 | DECLARE v_emp scott.emp%ROWTYPE; BEGIN SELECT * INTO v_emp FROM scott.emp WHERE empno=7654; DBMS_OUTPUT.PUT_LINE( '姓名:' ||v_emp.ename); DBMS_OUTPUT.PUT_LINE( '部门编号:' ||v_emp.deptno); END ; |
2.3 记录类型
语法:TYPE record_type IS RECORD( field1_name data_type_and_size [NOT NULL][:=default_value], ... fieldn_name data_type_and_size [NOT NULL][:=default_value] );
将逻辑相关的数据作为一个单元存储起来,使用TYPE关键字来定义,是显示记录类型,使用%ROWTYPE是隐式记录类型。
--样例一:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | DECLARE TYPE emp_record_type IS RECORD( ename VARCHAR2(10), deptno NUMBER(2) ); emp_record emp_record_type; BEGIN SELECT ename,deptno INTO emp_record FROM scott.emp WHERE empno=7654; DBMS_OUTPUT.PUT_LINE( '姓名:' ||emp_record.ename); DBMS_OUTPUT.PUT_LINE( '部门编号:' ||emp_record.deptno); END ; |
--样例二:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | DECLARE TYPE emp_record_type IS RECORD( name scott.emp.ename%TYPE, salary scott.emp.sal%TYPE, deptno scott.emp.deptno%TYPE ); emp_record emp_record_type; BEGIN select ename,sal,deptno into emp_record from scott.emp where empno=& no ; DBMS_OUTPUT.PUT_LINE( '姓名:' ||emp_record. name ); DBMS_OUTPUT.PUT_LINE( '部门编号:' ||emp_record.deptno); END ; |
或:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | DECLARE TYPE emp_record_type IS RECORD( name scott.emp.ename%TYPE, salary scott.emp.sal%TYPE, deptno scott.emp.deptno%TYPE ); emp_record emp_record_type; BEGIN select ename,sal,deptno into emp_record. name ,emp_record.salary,emp_record.deptno from scott.emp where empno=& no ; DBMS_OUTPUT.PUT_LINE( '姓名:' ||emp_record. name ); DBMS_OUTPUT.PUT_LINE( '部门编号:' ||emp_record.deptno); END ; |
--样例三:
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 | --检索数据 DECLARE dept_record scott.dept%ROWTYPE; BEGIN dept_record.deptno:=1; dept_record.dname:= 'administrator' ; dept_record.loc:= 'NC' ; insert into scott.dept values dept_record; END ; --插入数据 DECLARE dept_record scott.dept%ROWTYPE; BEGIN dept_record.deptno:=2; dept_record.dname:= 'administrator' ; insert into scott.dept(deptno,dname) values (dept_record.deptno,dept_record.dname); END ; --更新数据 DECLARE dept_record scott.dept%ROWTYPE; BEGIN dept_record.deptno:=1; dept_record.dname:= 'HZY' ; update scott.dept set row=dept_record where deptno=dept_record.deptno; END ; --删除数据 DECLARE dept_record scott.dept%ROWTYPE; BEGIN dept_record.deptno:=1; delete from scott.dept where deptno=dept_record.deptno; END ; |
本文转自stock0991 51CTO博客,原文链接:http://blog.51cto.com/qing0991/1597195,如需转载请自行联系原作者