PLSQL 笔记01

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的所有数据怎么放
想一下 如果要把一张表的一条记录的数据全部取出来
定义一个记录类型   在定义一个变量保存数据



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值