接触 PL/SQL 第一天
2017-04-03 15:05
197 查看
接触 PL/SQL 第一天
PL/SQL是什么呢?
书上说PL/SQL是建立在标准SQL语言之上的过程性拓展
那么PL/SQL有什么好处呢?
1.提高应用程序的运行性能
2.提供模块化的程序设计功能
3.允许定义标识符
4.具有过程语言控制结构
5.具有良好的兼容性
6.处理运行错误
PL/SQL的基本单元是块(Block),PL/SQL块又由三部分组成
其中 begin、end两部分是必须有的,declare、exception两部分可以不写
下面写两个简单的PL/SQL
只包含 begin、end两部分的PL/SQL:
包含四个部分的PL/SQL:
1.匿名块
如上面例子,没有名字的块
2.命名块
在匿名块之前加 <<name>> 就是命名块了,块与块之间是可以多层嵌套的,有了名字就好区分了
3.子程序
子程序又可以分为 过程、函数、包 三个对象
创建过程:
不知为何我的触发器并不能创建成功
代码贴出来
PL/SQL是什么呢?
书上说PL/SQL是建立在标准SQL语言之上的过程性拓展
那么PL/SQL有什么好处呢?
1.提高应用程序的运行性能
2.提供模块化的程序设计功能
3.允许定义标识符
4.具有过程语言控制结构
5.具有良好的兼容性
6.处理运行错误
PL/SQL的基本单元是块(Block),PL/SQL块又由三部分组成
declare -- 定义部分 -- 这里定义一些变量、常量、游标、复杂数据类型等 begin --执行部分 -- 这里执行PL/SQL语句和SQL语句 exception -- 异常部分 -- 在这里处理异常 end; -- 这是块结束标记
其中 begin、end两部分是必须有的,declare、exception两部分可以不写
下面写两个简单的PL/SQL
只包含 begin、end两部分的PL/SQL:
set serveroutput on -- 开启控制台输出功能 begin -- 执行模块 dbms_output.put_line('hello,everybody'); -- 输出 hello,everybody end; -- 结果标记
包含四个部分的PL/SQL:
declare -- 定义部分 v_ename varchar2(10); begin -- 执行部分 select ename into v_ename from emp where empno=&no; //输入员工号,查询该员工姓名 dbms_output.put_line('员工名字:'||v_ename); exception -- 异常部分
when NO_DATA_FOUND then dbms_output.put_line('员工号不存在'); end; -- 结束标记PL/SQL又可以分为四大类:
1.匿名块
如上面例子,没有名字的块
2.命名块
在匿名块之前加 <<name>> 就是命名块了,块与块之间是可以多层嵌套的,有了名字就好区分了
3.子程序
子程序又可以分为 过程、函数、包 三个对象
创建过程:
create or replace procedure insert_dept(no number,name varchar2) is begin insert into dept (deptno,dname) values(no,name); end; call insert_dept('5','财务部'); -- 调用过程创建函数:
create or replace function select_sal_year(no number) return number is sal_year(8,2); begin select sal*12 into sal_year from emp where empno=no; return sal_year; exception
when NO_DATA_FOUND then dbms_output.put_line('员工号不存在'); end; var sal number; -- 声明变量sal execute :sal:=select_sal_year(3); -- 用变量接收返回值 print sal; -- 查看员工年薪包:
create package emp_pkg is procedure insert_dept(no number,name varchar2); function select_sal_year(no 4000 number) return number; end emp_pkg;实现包体:
create or replace package body emp_pkg is procedure update_sal(na varchar2,newsal number) is begin update emps set sal=newsal where ename=na; end; function sal_year(name varchar) return number is sal_year number(9,2); begin select sal*12+nvl(comm,0) into sal_year from emps where ename=name; return sal_year; end; end emp_pkg;4.触发器:
不知为何我的触发器并不能创建成功
代码贴出来
create or replace trigger update_emp after update of deptno on depts for each row begin update emps set deptno=:new.deptno where deptno=:old.deptno; end;错误报告:
ORA-04089: cannot create triggers on objects owned by SYS 04089. 00000 - "cannot create triggers on objects owned by SYS" *Cause: An attempt was made to create a trigger on an object owned by SYS. *Action: Do not create triggers on objects owned by SYS.总结: 总体上感觉PL/SQL跟Java中的方法有点像,包又与接口有点类似
相关文章推荐
- PL/SQL 语句块初次接触(游标使用,实现loop的continue)
- 接触 PL/SQL 第二天
- PL/SQL(事务和锁)
- PL/SQL 11g R2 —— 定义PL/SQL变量 !
- 15 PL/SQL视图(虚拟表)
- PL/SQL下一些常用的命令汇总
- pl/sql常用脚本3
- oracle数据库(PL/SQL)
- PL/SQL Developer 远程连接oracle
- oracle pl/sql 中 使用包
- ORA-00913错误:PL/SQL: ORA-00913: too many values
- 免安装Oracle客户端软件-使用pl/sql配置登陆
- PL/SQL 9 注册码
- PL/SQL(二)数据类型
- PL/SQL开发中动态SQL的使用方法
- SQL PL 精萃
- PL/SQL
- 解决X64操作系统PL/SQL连接报错问题 make sure you have the 32 bits oracle client installed
- PL/SQL经典练习
- PL/SQL Developer 导入导出csv文件