创建表
1、自定义建表
1 | create table table_name |
2、从其他数据库中复制表(包括表结构数据)
1 | create table Table_Name |
3、从其他数据库中复制表(只复制表结构)
1 | create or replace table Table_Name |
视图
1、创建视图
1 | create or replace view dept_sum_vw(name,minsal,maxsal,avgsal) |
2、查询视图
1 | select * from view_name; |
索引
1、创建索引
1 | //create unique index为创建唯一索引 |
2、查看索引
一般利用数据字典视图USER_INDEXES、USER_IND_COLUMNS查看索引信息。
1 | select * from user_indexes; |
1 | select * from user_ind_columns |
3、删除索引
1 | drop index Index_Name; |
同义词
1、创建同义词
1 | //也可以为同义词、视图创建同义词,将Table_Name改为相应的名字就好。 |
2、查看同义词
利用数据字典视图user_synonyms、all_synonyms查看同义词信息。
1 | select * from user_synonyms; |
1 | select * from all_synonyms; |
3、删除同义词
1 | drop synonym Sy_Name; |
序列
1、创建序列
一般有步长、最大值、最小值时一般不采用cachce
1 | create sequence Se_Name |
2、查看序列
利用数据字典视图user_sequences、all_sequences查看序列信息。
1 | select * from user_sequences; |
1 | select * from all_sequences; |
3、引用序列
向表中插入序列
1 | insert into Table_Name |
4、修改序列
1 | alter sequence Se_Name |
游标
Oracle数据库的Cursor类型包含三种:
1.静态游标
—- A、显式(explicit)游标
—- B、隐式(implicit)游标
2.REF游标,一种引用类型,类似于指针。
1 | //隐式游标的用法 |
1 | //显式游标分为四个步骤:定义游标、打开游标、提取游标和关闭游标。 |
1 | //游标for循环,自动打开游标,移动数据,关闭游标 |
异常
在PL/SQL块中有三种类型的异常:预定义异常(oracle自带)、非预定义异常、用户自定义异常
1、非预定义的异常
1 | create or replace |
1 | create or replace |
1 | create or replace |
2、用户自定义异常
1 | declare |
储存程序
储存程序的形式有:储存过程、储存函数、触发器和程序包等。
1、储存过程
1 | //无参数 |
1 | //有参数 |
1 | //执行过程 |
1 | //删除过程 |
2、储存函数
1 | create or replace function obj4_5(eno in EMP.EMPNO%type) |
1 | //执行方法一 |
1 | //执行方法二 |
1 | //删除函数 |
3、程序包
—程序包相当于面对对象语言中的类。
—程序包有”包说明”和”包主体”组成。包说明用来定义数据类型、变量、过程、函数、异常和游标等元素,相当于程序包的接口。
—包主体实现说明中的代码。
—先编译包说明、再编译包主体,不能同时编译。
1 | //包说明 |
1 | //包主体 |
1 | //调用包 |
1 | //更新了包说明或程序包后,也应该重新编译包说明与包主体。防止出错。 |
1 | //删除包 |
4、触发器
— 分为DML触发器、instead of触发器、系统触发器(DDL事件、模式、数据库)
— 触发器不接受参数
— 一个表最多12个触发器
— 在触发器的执行部分只能用DML语句(select、insert、update、delete),不能用DDL语句(create、alter、drop)。
1 | ----------------------------DML触发器----------------------- |
1 | create or replace trigger obj8_3 |
1 | create or replace trigger obj8_6 |
1 | //删除触发器 |
1 | //使触发器失效、暂时不起作用 |
1 | //条件谓语 |
1 | //触发条件 |
1 | ----------------------instead of触发器------------------- |
PL/SQL
— 在 PL/SQL 块中可以包含select语句、DML语句、DCL语句,但不能直接包含DDL语句。
— 可以使用 into 子句把查询结果放在变量中。使用 set serveroutput on 命令设置环境变量 serveroutput 为打开状态。
— declare 关键字标志这 PL/SQL 程序声明段的开始,在声明段中可以声明变量、常量和游标等对象。
— begin 关键字标志着主程序的开始, end 关键字标志着主程序体的结束。
— 使用函数 dbms_output.put_line() 可以输出参数的值
输出九九乘法表
1 | create procedure P_name |
闰年
在A_DB模式中有一个名为tan3(a)的表,表中有若干个整数(不要管是否有重复),假设这些数表示年份。 请编写一个名为myfun25()的存储函数(无参数),统计该表中有多少个年份是闰年,并作为函数返回值返回。 说明:闰年的计算方法:被400整除,或被4整除而不能被100整除的年份为闰年。
1 | create or replace function myfun25 |
水仙花数
在A_DB模式中有一个名为tanbn1(a,b)的表,表中有若干个整数(不要管是否有重复)。 请编写一个名为F25()的存储函数(无参数),统计该表中有多少个数是水仙花数,并作为函数返回值返回。
说明:如果一个三位数等于其各位数字的立方之和,则该数称为水仙花数。如153=111+555+333。
1 | create or replace function F25 |
1+2+?+n
请编写一个名为F24()的存储函数(无参数),计算 1+2+?+n 的和。 说明:n的值存放在A_DB模式中的“输入参数表”中。
1 | create or replace function F24 |
二进制转换为十进制
1 | reate or replace function obj7_9(v_char VARCHAR) |
连续整数之和一
编写一个名为obj7_6的存储函数,判断正整数n是否是若干个连续的正整数之和。如是,则返回1,否则返回0。n是函数的参数
1 | create or replace function obj7_6(n number) |
连续整数之和二
编写一个名为obj7_5的存储过程,判断正整数n是否是若干个连续的正整数之和。如是,则输出这些连续的正整数;如果有多串连续的正整数,则输出最长的那串连续的正整数。n是过程的参数。如:15=1+2+3+4+5,15=7+8,则输出1,2,3,4,5。
1 | create or replace procedure obj7_5(n number) |