PL/SQL学习笔记

来源:互联网 发布:阿里云如何域名解析 编辑:程序博客网 时间:2024/06/10 06:59
declare --可选 --(声明部分) --变量名 变量类型 可选空值约束 可选默认值 | 可选赋值 分号结尾 value1 NUMBER(2) not null default 0; v_ename emp.ename%TYPE;--> %TYPE 先前已经声明的变量 | 表中字段 v_row emp%ROWTYPE;--> table | cursor %ROWTYPE 与 数据库表 或 游标 的行具有相同类型的记录变量 --自定义一个复合数据类型 TYPE many_value IS RECORD (name v_ename%TYPE:='chen',eno number(2),job varchar2(20));-->括号内部定义和普通类型定义一致 TYPE ps_table IS TABLE OF DATE INDEX BY BINARY_INTEGER;-->定义的是一个PL/SQL表 v_many many_value; v_ps_table ps_table; begin --必选 --(执行部分) --控制结构 --IF 逻辑结构:IF-THEN-END IF IF-THEN-ELSE-END IF IF-THEN-ELSEIF-THEN-END IF --对复合数据类型进行赋值 v_many.eno:=10; v_many.job:='programmer'; --对PL/SQL表进行赋值 v_ps_table(1) := SYSDATE; -->对于PL/SQL表有 EXISTS(n) 判断PL/SQL表中指定元素是否存在 --> COUNT返回PL/SQL表当前包含元素的个数 --> FIRST | LAST 在PL/SQL中返回第一个 | 最后一个索引数字 --> DELETE | DELETE(n) | DELETE(n,m) 删除PL/SQL表中元素 | 删除第n个元素 | 删除第n到m个元素 --连接变量 连接变量在sql plus中定义--> SQL>VARIABLE ret_val NUMBER --:ret_val:=1; ->在PL/SQL中引用连接变量,前面加一个冒号: , 赋值之后可以在SQL PLUS中显示连接变量的值:SQL>PRINT ret_val; value1:=10; IF value1>0 THEN DBMS_OUTPUT.PUT_LINE('value is greater than 0'); ELSE IF value1=0 THEN DBMS_OUTPUT.PUT_LINE('value is 0'); ELSE DBMS_OUTPUT.PUT_LINE('value is less than 0'); END IF; END IF; --CASE 逻辑结构:CASE-WHEN-THEN-;WHEN-THEN-.... CASE value1 WHEN -1 THEN DBMS_OUTPUT.PUT_LINE('value is less than 0'); WHEN 0 THEN DBMS_OUTPUT.PUT_LINE('value is 0'); WHEN 1 THEN DBMS_OUTPUT.PUT_LINE('value is greater than 0'); ELSE DBMS_OUTPUT.PUT_LINE('value is '||value1); END CASE; --循环控制语句 LOOP 3种: BASIC LOOP | FOR LOOP | WHILE LOOP --BASIC LOOP LOOP value1:=value1+1; EXIT WHEN value1>0; END LOOP; --FOR LOOP FOR i IN 1..value1 LOOP DBMS_OUTPUT.PUT_LINE('for ' || i); END LOOP; --WHILE LOOP WHILE value1>20 LOOP value1:=value1+1; END LOOP; --在PL/SQL中允许使用的SQL语句只有DML,事务控制语句,直接使用DDL是非法的 --SELECT 只能返回一行数据 INTO子句必须有 -->将查询到的ename存放到v_ename中 SELECT ename INTO v_ename FROM emp WHERE empno=7527; DBMS_OUTPUT.PUT_LINE('ename is '||v_ename); exception --可选 --(异常处理部分) WHEN OTHERS THEN --必须是最后一个错误处理语句 DBMS_OUTPUT.PUT_LINE('something error!'); END;

 注:在处理潜在的二义性SQL语句时:--局部变量和形式参数优先于数据库表名--数据库的列名优先于局部变量和形式参数名字控制语句IF中的ELSEIF没有匹配的END IF;处理NULL值:--使用is null 来处理null值的表达式--任何包含null值的逻辑表达式,其值为null,不为true或false--用null值来进行字符串连接时,null被当成空字符串来处理循环可以嵌套:--循环允许多层嵌套--标签用于区别PL/SQL块和循环--使用exit语句退出到循环的外层oracle服务预定义异常:--CASE_NOT_FOUND (ORA-06592)--NO_DATA_FOUND (ORA-1403)--TOO_MANY_ROWS (ORA-1422)--DUP_VAL_ON_INDEX (ORA-0001)--ZERO_DIVIDE (ORA-1476)--INVALID_CURSOR (ORA-1001)--VALUE_ERROR (ORA-6502)
0 0
原创粉丝点击