设为首页 收藏本站
查看: 524|回复: 0

[经验分享] Oracle学习笔记(2) PLSQL编程基础

[复制链接]

尚未签到

发表于 2016-7-29 10:48:25 | 显示全部楼层 |阅读模式
这是第二章的学习笔记,学习完第一章的基础之后,从现在开始要学习Oracle编程了……,希望大家能多给俺一些支持啊!
    编程时使用的工具是PLSQL Developer 7.1.4

select * from Employee;
select * from dba_tab_cols t where t.table_name='EMPLOYEE';


-- 声明部分,用于定义变量
declare

constant用于定义常量,当定义常量时必须指定它的初始值,且数据不能改变

n_aaa constant number(4,2) :=5.5;

boolean 类型的值只能用于sqlplus语句块中,不能用在表字段的数据类型中
not null 用于强制初始化变量不能为空,此时必须为变量指定值
default用于指定变量或常量的默认值

v_valid boolean not null default false;
v_name varchar2(20);

为了确保变量使用合适的数据类型和长度,可以使用%type属性定义变量,它会按照数据库列
或其它变量来确定新变量的类型和长度

v_job Employee.Job%type;

将v_job2定义为与变量v_job的数据类型和长度完全一致

v_job2 v_job%type;

复合变量:
处理单行单列数据时,用标量变量;处理单行多列时,用PL/SQL记录;处理单列多行时,
用集合;处理多行多列数据时,可以结合使用PL/SQL记录和集合
PL/SQL记录(RECORD):
       方法一:
       emp_recode_type 是PL/SQL记录类型并包含有三个成员(name,salary,job)

type emp_recode_type is record(
name employee.name%type,
salary employee.salary%type,
job employee.job%type
);

emp_recode是记录变量

emp_recode emp_recode_type;

方法二:
       使用表名的%rowtype 属性定义记录变量
       注意:用%rowtype 属性定义记录变量时,记录成员个数、名称、类型必须与
       表或视图的列的个数、名称和类型完全相同

emp_recode2 employee%rowtype;

集合类型
       PL/SQL 表(也称索引表,下标可以为负数,下标没有上限和下限,并且元素的个数无限)

--这里的table 实指集合
type name_table_type is table of employee.name%type index by binary_integer;
name_table name_table_type;

嵌套表:      
     嵌套表的下标不能为负值,其元素的个数没有限制并可以使用表列的数据类型
      在使用嵌套表时必须先用create type 语句建立嵌套表类型
      嵌套表只是比PL/SQL 表少了 index by binary_integer

type num_table_type is table of number(4);
num_table num_table_type;

varray(变长数组):
        varray的元素个数是有限制的,在使用其之前必须先建立varray类型
         在此创建的varray只能存放20个varchar2类型的数据
         注意:嵌套表列数据需要存储在专门的存储表中,而varray数据则与
         其它列数据一起存放在表字段中

type v_varray_type is varray(20) of varchar2(10);
n_empno employee.empno%type;


-- 程序开始
begin


执行部分,执行PL/SQL/和SQL语句
可以用into将从表人查询出来的值赋给指定的变量
将值赋给变量有两种方法,一是用 := ,二是用 into
& 符号用于提示用户输入一个值,& 为sqlplus的替代变量

n_empno := &输入你要查询的员工编号:;
select Name,Job into v_name,v_job from Employee where empno=n_empno;

这里的 || 号与Java中的 + 号类似,表示要将两边的字符串连接起来
dbms_output是Oracle所提供的系统包,用于输出数据或消息,
而put_line是该包所包含的过程,用于输出字符串信息并换行
当在CMD中使用dbms_output包时,必须要先将sqlplus 的环境变量
serveroutput 设置为 on

dbms_output.put_line('你查询的员工是:' || v_name || '  他的工作是:' || v_job);

引用记录变量的成员并赋值(赋值可以用 := 和 into 两种方法)
注意:用select……into 语句给记录变量赋值时,select语句中的列名列表的名称和个数、
类型必须与记录变量的成员个数、名称、类型完全相同

dbms_output.put_line('你查询的员工是:' || v_name || '  他的工作是:' || v_job);
emp_recode.name := '钱森';
dbms_output.put_line('引用记录变量的成员并赋值(Recode):' || emp_recode.name);
select name,job into emp_recode2.name,emp_recode2.job from employee where empno=2;
dbms_output.put_line('引用记录变量的成员并赋值(RowType):' || emp_recode2.name || ' 的工作是:' || emp_recode2.job);
-- 使用PL/SQL表(索引表)
select name into name_table(-50) from employee where empno=1;
dbms_output.put_line('雇员名:' || name_table(-50));
-- 使用嵌套表
-- 必须先设置嵌套表的下标,然后才能对该集合进行赋值
num_table := num_table_type(1,2,3,4,5);
num_table(1) := 10;
num_table(5) := 100;
dbms_output.put_line('使用嵌套表:' || num_table(1) || ',' || num_table(5));
exception
-- 异常处理部分
when NO_DATA_FOUND then dbms_output.put_line('查询不到员工编号为' || n_empno || '的员工!');
when TOO_MANY_ROWS then dbms_output.put_line('数据完整性错误,员工编号' || n_empno || '重复!');
when OTHERS then dbms_output.put_line('PL/SQL执行错误!' || sqlerrm);
-- 程序结束
end;
/

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-251102-1-1.html 上篇帖子: Oracle 10g for AIX 5304 安装 下篇帖子: (转)ORACLE 中ROWNUM用法总结!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表