--===================================PLSQL基础篇============================ -- 数据类型: ---- 标量类型:数字 number,字符 varchar,varchar2,char,日期 , -- 布尔 boolean (true,false,null)(存储单个值) --- 复合类型:record,集合类型 (存放多个值的变量) --- 参照类型:cursor --- LOB 类型:存储大数据类型(BFILE,BLOB,CLOB,NCLOB); --============ =================================== --- EMP , DEPT 表; --=============================================== --变量声明 declare v_realName varchar2(20); -- := 赋值符号 v_baseCost number(7,2) :=5.9; --定义number类型,赋值5.9 v_count binary_integer :=0; v_start boolean not null default false; begin select 'hello ' into v_realname from dual; -- 给 v_realName变量赋值 dbms_output.put_line('v_realName--'||v_realName); dbms_output.put_line('v_baseCost---'||v_baseCost); dbms_output.put_line('v_count---'||v_count); end; -- 执行 用 " / " ,下述同样操作 --dbms_output.put_line('v_start---'||v_start); -- boolean类型的不能输出,不能插入,不能将列值保存到boolean变量中 -- 只能对boolean变量执行逻辑操作(见后逻辑语句) -- %type: 变量具有数据库的表中某列或其它变量相同的类型 declare v_name emp.ename%type; begin select ename into v_name from emp where empno = 7900; dbms_output.put_line('v_name---'||v_name); end; -- Record类型:处理单行多列问题 -- record变量的引用:记录类型变量的属性引用方法 " . " declare --t_emp_rec是记录类型 type t_emp_rec is record ( name emp.ename%TYPE, -- name 是t_emp_rec的成员. job emp.job%TYPE); emp_rec t_emp_rec; -- 声明--t_emp_rec记录类型的变量 begin select ename , job into emp_rec from emp where empno = 7900; -- 读取数据到record类型 -- select ename , job , sal into emp_rec from emp where empno = 7900; -- error,没有足够的列值 dbms_output.put_line('emp_rec-name---'||emp_rec.name); dbms_output.put_line('emp_rec-job---'||emp_rec.job); end ; -- 用%rowtype来定义record类型(作用:简化record的定义). -- 当使用%rowtype定义记录类型时,record成员的名称和类型与表或者视图的列名称和类型完全相同. declare v_emp emp%rowtype ; -- v_cost的名称和类型和 cost表一样 begin select * into v_emp from emp where empno = 7900; -- 读取数据到record类型 dbms_output.put_line('v_emp-name---'||v_emp.ename); end ; --================================================================ --=========流程控制:============= /* if 布尔表达式 then xxxx elsif 布尔表达式 then xxxx else xxxx end if; */ declare v_var boolean not null default false; v_int integer :=5; begin if v_var then dbms_output.put_line('v_var: true'); else dbms_output.put_line('v_var: false'); -- then dbms_output.put_line('v_var: false'); error end if; --必须结束if -- 多个if嵌套 if(v_int > 5) then dbms_output.put_line('v_int: >5'); elsif (v_int > 2) then dbms_output.put_line('v_int: >2'); else dbms_output.put_line('v_int: else'); end if; end ; /* loop循环: loop 语句 1 ; 语句 2; exit when 表达式; end loop; */ declare v_int integer :=3; begin loop dbms_output.put_line('v_int:'||v_int); v_int :=v_int+1; if(v_int > 10) then exit; --退出 end if; --exit when v_int > 10; 可以出现在循环的任何位置,注意是when ,不是then; end loop; end; --where循环: /* while 布尔表达式 loop 语句1; 语句2; end loop; */ declare v_int integer :=1; begin while v_int < 10 loop dbms_output.put_line('v_int:'||v_int); v_int :=v_int+1; end loop; end; /* for循环: for 循环计数器 in 下限 .. 上限 loop 语句1; 语句1; end loop; */ declare v_int integer :=0; begin for v_int in 1 .. 10 loop -- 循环 包括1,包括10; dbms_output.put_line('v_int:'||v_int); --v_int :=v_int+1; v_int不能用来作为赋值目标 end loop; end; -- for循环 倒序 declare v_int integer :=10; begin for v_int in reverse 1 .. 10 loop dbms_output.put_line('v_int:'||v_int); --v_int :=v_int+1; v_int不能用来作为赋值目标 end loop; end; --Notice: v_int 是 1.. 10循环中的每个变量,不能用来作为赋值目标 -- 把 v_int 初始化为5,输出的结果跟初始化为0是一样.类似如下的java程序: int j = 5; for (j = 1 ;j <= 10 ; j++){ System.out.println(j); // 1 .... 10; } --NULL --NULL语句不会执行任何操作,并且会直接将控制传递到下一条语句,使用NULL语句主要是提高程序的可阅读性 DECLARE v_sal emp.sal%TYPE; v_ename emp.ename%TYPE; BEGIN SELECT ename,sal into v_ename,v_sal FROM emp WHERE empno=7900; IF v_sal<3000 then UPDATE emp SET comm=sal*1.2 WHERE ename=v_ename; ELSE NULL; END IF; END;
Oracle数据库之PLSQL基础
猜你喜欢
转载自whatisjavabean.iteye.com/blog/2002434
今日推荐
周排行