[DECLARE] -- declaration statements声明部分 BEGIN -- executable statements可执行部分 [EXCEPTION] --exception statements异常处理部分 END
用一个完整的PL/SQL块实现查询雇员号为7934的雇员信息。
1 2 3 4 5 6 7 8 9
Declare p_sal number(7,0); P_comm number(7,0); Begin select sal,comm into P_sal,p_comm from emp where empno=7934; Exception When no_data_found Then Dbms_output.put_line('员工号不存在'); End;
声明常量或变量
1 2 3 4
<变量常量名>[CONSTANT]<数据类型>[NOTNULL][:=IDEFAULT<初始值>]; --例如: total constant number: =100; v_name varchar2 (10) ;
SQL>set serverout on declare empcode emp.empno%type; emp_ex emp%ROWTYPE; begin select empno into empcode from emp where ename='SMITH'; select*into emp_ex from emp where ename ='ALLEN'; dbms_output.put_line('员工SMITH的雇员号为: '||empcode); dbms_output.put_line('员工ALLEN的雇员信息为:'||'雇员号'||emp_ex.empno||' '||'工作职位'||emp_ex.job||'薪水'||emp_ex.sal); end;
TYPE <记录类型名>IS RECORD ( <数据项1><数据类型>[NOTNULL[:=<表达式1>]], <数据项2><数据类型>[NOTNULL[:=<表达式2>]], ...... <数据项n><数据类型>[NOTNULL[:=<表达式n>]]) ; <记录变量名><记录类型名> ;
将雇员信息定义为记录类型。
1 2 3 4 5 6 7 8 9 10 11 12
declare type emp_record_type is record (v_ename emp.ename%type, v_job emp.job%type, v_sal emp.sal%type); emp_rec emp_record_type; begin select ename,job,sal into emp_rec from emp where empno=&eno; dbms_output.put_line(emp_rec.v_ename||':'|| emp_rec.v_job||': '||emp_rec.v_sal); end;
TYPE <表类型名>ISTABLEOF<数据类型> INDEX BY BINARY_INTEGER; <表变量名><表类型名>;
索引表类型的定义。
1 2 3 4 5 6 7 8 9
DECLARE TYPE ename_table_type ISTABLEOF emp.ename%TYPE INDEX BY BINARY_INTEGER; Ename_table ename_table_type; BEGIN SELECT ename INTO ename_table(1) FROM emp WHERE empno=7902; Dbms_output.put_line('员工名:'|| ename_table(1)); END;