procedure    过程化 

 pl/sql       ------过程化sql  存储过程 

 proc/c++     ------使用c  或者c++语言访问oracle 



 SQLJ  、JDBC ------java访问数据库的技术 

 ODBC  ADO    ------vc中访问数据库的技术 

 oci          ------oracle 底层的连接接口 



 四个关键字 



 declare 

      /*申明区*/   定义变量 或者类型 

 begin 

      /*执行区*/   执行业务逻辑 

 exception 

      /*异常处理区*/ 处理异常 

 end; 





 写一个plsql程序: 

 begin 

     dbms_output.put_line('hello plsql!!');  

 end; 



 打开输出  

 set serveroutput on 



 SQL>/ 

 begin 

     dbms_output.put_line('hello plsql!!');  

 end; 

 / 



 执行过程:plsql块 先整个的发送给plsql语句执行器 

           plsql语句执行器只指向plsql语句  是普通 

 sql语句则由plsql引擎交给sql语句执行器  

 最后由plsql引擎整理出结果交给终端 

 编程工具: 

 sqlplus 
      命令行下的工具 

 sqldeveloper   sqlnavigator  sqlprogram 



 标识符是用来给变量  类型 游标 等对象命名的 



 --------------------------------------------- 

 plsql中的变量定义   -----申明区 



 declare 

     var_i      number:=100; 

     var_name   varchar2(30); 

 begin 

     var_i:=1000; 

     var_name:='test'; 

     dbms_output.put_line(var_i||':'||var_name); 

 end; 

 / 



 变量的名字要在类型之前   

 赋值使用:= 

 拼接符号可以直接拼接数字和字符串 

 oracle sql 中的数据类型可以直接在plsql使用 



 标量类型: 

 varchar2    char   number   date 

 boolean  ----true  false  null 

 binary_integer  -----二进制整数 

 number 



 引用类型: 

 ref  cursor   



 组合类型: 

 record  table   



 大类型: 

     BLOB 

     CLOB 

     BFILE 



 declare 

     var_i   constant   number:=100; 

     var_name   varchar2(30); 

 begin 

     var_name:='test'; 

     dbms_output.put_line(var_i||':'||var_name); 

 end; 

 / 



 declare 

     var_i   constant   number:=100; 

     var_name   varchar2(30) not null:='gg'; 

 begin 

     var_name:='test'; 

     dbms_output.put_line(var_i||':'||var_name); 

 end; 

 / 

 ---------------------------------------------- 

 定义两个变量 

 一个和s_emp表中的id是一个类型 

 一个和s_emp表中的first_name 是一个类型 

 赋值并输出 

 declare 

      var_id        number(7):=0; 

      first_name varchar2(25); 

 begin 

      var_id:=1; 

      select first_name into first_name  

          from s_emp where id=var_id; 

      dbms_output.put_line(var_id||'@'||first_name); 

 end; 

 / 

 ---------------------------- 

 不查看s_emp表 

 定义两个变量 

 一个和s_emp表中的id是一个类型 

 一个和s_emp表中的first_name 是一个类型 

 赋值并输出 



 %type   -------用来取得表中的字段对应的类型 

 declare 

      var_id        s_emp.id%type:=0; 

      first_name    s_emp.first_name%type; 

 begin 

      var_id:=1; 

      select first_name into first_name  

          from s_emp where id=var_id; 

      dbms_output.put_line(var_id||'@'||first_name); 

 end; 

 / 



 ------------------------------------------------ 

 record 类型 



 declare 

     /*定义一个record类型*/ 

     type  emprec is record( 

         id         s_emp.id%type, 

first_name s_emp.first_name%type, 

salary     s_emp.salary%type  

     ); 

     /*使用emprec类型 定义变量*/ 

     var_emp   emprec; 

 begin 

     var_emp.id:=100; 

     var_emp.first_name:='zhangsan'; 

     var_emp.salary:=10000; 

     dbms_output.put_line(var_emp.id||':'|| 

     var_emp.first_name||':'||var_emp.salary); 

 end; 



 查询的数据和记录类型的字段数相同 

 declare 

     /*定义一个record类型*/ 

     type  emprec is record( 

         id         s_emp.id%type, 

first_name s_emp.first_name%type, 

salary     s_emp.salary%type  

     ); 

     /*使用emprec类型 定义变量*/ 

     var_emp   emprec; 

 begin 

     /*使用查询赋值*/ 

     select id,first_name,salary into var_emp 

     from s_emp where id=1; 

     dbms_output.put_line(var_emp.id||':'|| 

     var_emp.first_name||':'||var_emp.salary); 

 end; 

 查询的数据 比 记录类型的字段少 



 declare 

     /*定义一个record类型*/ 

     type  emprec is record( 

         id         s_emp.id%type, 

first_name s_emp.first_name%type, 

salary     s_emp.salary%type  

     ); 

     /*使用emprec类型 定义变量*/ 

     var_emp   emprec; 

 begin 

     /*使用查询赋值*/ 

     select id,salary into var_emp.id,var_emp.salary 

     from s_emp where id=1; 

     dbms_output.put_line(var_emp.id||':'|| 

     var_emp.first_name||':'||var_emp.salary); 

 end; 





 -------- 

 记录类型变量的赋值 

 declare 

     /*定义一个record类型*/ 

     type  emprec is record( 

         id         s_emp.id%type, 

first_name s_emp.first_name%type, 

salary     s_emp.salary%type  

     ); 

     /*使用emprec类型 定义变量*/ 

     var_emp    emprec; 

     var_emp1   emprec; 

 begin 

     /*使用查询赋值*/ 

     select id,first_name,salary into var_emp 

     from s_emp where id=1; 

     dbms_output.put_line(var_emp.id||':'|| 

     var_emp.first_name||':'||var_emp.salary); 

     /*整体赋值*/ 

     /*var_emp1:=var_emp;*/ 

     dbms_output.put_line(var_emp1.id||':'|| 

     var_emp1.first_name||':'||var_emp1.salary); 

 end; 



              



 declare 

     /*定义一个record类型*/ 

     type  emprec is record( 

         id         s_emp.id%type, 

first_name s_emp.first_name%type, 

salary     s_emp.salary%type  

     ); 

     /*使用emprec类型 定义变量*/ 

     var_emp    emprec; 

     var_emp1   emprec; 

 begin 

     /*使用查询赋值*/ 

     select id,first_name,salary into var_emp 

     from s_emp where id=1; 

     dbms_output.put_line(var_emp.id||':'|| 

     var_emp.first_name||':'||var_emp.salary); 

     /*单个赋值*/ 

     var_emp1.first_name:=var_emp.first_name; 

     var_emp1.salary:=var_emp.salary; 

     dbms_output.put_line(var_emp1.id||':'|| 

     var_emp1.first_name||':'||var_emp1.salary); 

 end;


--------------------------------------------
把s_dept的id是50的所有数据保存
一个记录类型定义的变量中
并打印输出这些信息


想一下s_emp中id=1的所有数据怎么放
想一下 如果要把一张表的一条记录的数据全部取出来
定义一个记录类型   在定义一个变量保存数据