PL/SQL编程基础
DECLARE
/*
* 定义部分——定义常量、变量、复杂数据类型、游标、用户自定义异常
*/
BEGIN
/*
* 执行部分——PL/SQL语句和SQL语句
*/
EXCEPTION
/*
* 异常处理部分——处理运行错误
*/
END;
/*块结束标记 */
2. 使用变量和常量
identifier [CONSTANT] datatype [NOT NULL]
[:= | DEFAULT expr];
DECLARE
v_name varchar2(10);
BEGIN
select dname into v_name
from dept
where deptno = 90;
dbms_output.put_line('dname:'|| v_name);
EXCEPTION WHEN NO_DATA_FOUND THEN
dbms_output.put_line('没有该部门');
END;
3. PL/SQL块的类型
create or replace procedure update_sal
(p_ename VARCHAR2, p_newsal NUMBER)
AS
BEGIN
UPDATE emp SET sal = P_newsal
WHERE lower(ename) = lower(P_ename);
commit;
END;
调用:
exec update_sal(‘scott’, 2000); --SQL*PLUS中的命令
call update_sal(‘SCOTT’, 2000); --JAVA中调用的语句
create or replace function f_add(a number )
return number
as
begin
return a*2;
end;
调用:
select f_add(2) from dual;
select f_add(deptno) from dept;
create or replace package my_bao is
function f_add(a number ) return number;
end;
/
create or replace package body my_bao is
function f_add(a number ) return number
as
begin
return a*2;
end;
end;
/
调用:select my_bao.f_add(2) from dual;
declare
v_name dept.dname%type;
begin
select dept.dname into v_name
from dept
where deptno = 10;
dbms_output.put_line('dept = '||v_name);
end;
运行结果:
dept = ACCOUNTING
5. 复合变量
DECLARE
TYPE emp_record_type IS RECORD (
name emp.ename%TYPE,
salary emp.sal%TYPE);
emp emp_record_type;
BEGIN
SELECT ename,sal,job into emp
FROM emp WHERE empno=7788;
dbms_output.put_line('雇员名:' || emp .name);
END;
7. LOB变量
8. 使用SQL*Plus绑定变量
SQL> var name varchar2(10);
SQL> BEGIN
2 SELECT ename INTO :name FROM emp
3 WHERE empno = 7788;
4 end;
5 /
SQL> print name;
name
---------
SCOTT
9. PL/SQL词汇单元
当编写PL/SQL块时,每个PL/SQL块都包含多行代码,而每行代码又是由多个合法单元组成的,这些合法单元被称为词汇单元。
DECLARE
--定义v_sal变量
v_sal NUMBER(6,2);
BEGIN
/*
给变量赋值,
然后打印此变量
*/
v_sal := 1000;
dbms_output.put_line(v_sal);
END;
10.PL/SQL代码编写规则