MySQL 数据用例
CREATE TABLE dept(
deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 comment '编号',
dname VARCHAR(20) NOT NULL DEFAULT "" comment '名称',
loc VARCHAR(13) NOT NULL DEFAULT "" comment '地点'
) comment '部门表' ;
CREATE TABLE emp
(empno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,
ename VARCHAR(20) NOT NULL DEFAULT "" comment '名字',
job VARCHAR(9) NOT NULL DEFAULT "" comment '工作',
mgr MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 comment '上级编号',
hiredate DATE NOT NULL comment '入职时间',
sal DECIMAL(7,2) NOT NULL comment '薪水',
comm DECIMAL(7,2) NOT NULL comment '红利',
deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 comment '部门编号'
) comment '雇员表';
CREATE TABLE salgrade(
grade MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 comment '等级',
losal DECIMAL(17,2) NOT NULL comment '最低工资',
hisal DECIMAL(17,2) NOT NULL comment '最高工资'
) comment '工资级别表';
INSERT INTO salgrade VALUES (1,700,1200);
INSERT INTO salgrade VALUES (2,1201,1400);
INSERT INTO salgrade VALUES (3,1401,2000);
INSERT INTO salgrade VALUES (4,2001,3000);
INSERT INTO salgrade VALUES (5,3001,9999);
delimiter $
create function rand_num()
returns tinyint(6) READS SQL DATA
begindeclare return_num tinyint(6) default 0;set return_num = floor(1+rand()*30);return return_num;
end $
delimiter $
create function rand_string(n INT)
returns varchar(255) READS SQL DATA
begindeclare chars_str varchar(100) default'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ';declare return_str varchar(255) default '';declare i int default 0;while i < n doset return_str =concat(return_str,substring(chars_str,floor(1+rand()*52),1));set i = i + 1;end while;return return_str;
end $
delimiter $
create procedure insert_emp(in start int(10),in max_num int(10))
begindeclare i int default 0;#set autocommit =0 把autocommit设置成0,关闭自动提交;set autocommit = 0;repeatset i = i + 1;insert into emp values ((start+i) ,rand_string(6),'SALESMAN',0001,curdate(),2000,400,rand_num());until i = max_numend repeat;commit;
end $
call insert_emp(1,4000000) $
ORACLE 数据用例
CREATE TABLE dept(
deptno int primary key,
dname VARCHAR(20) NOT NULL,
loc VARCHAR(13) NOT NULL
) ;
alter table dept modify loc default '';
CREATE TABLE emp
(empno int NOT NULL ,
ename VARCHAR(20) NOT NULL ,
job VARCHAR(9) NOT NULL ,
mgr int NOT NULL ,
hiredate DATE NOT NULL ,
sal DECIMAL(7,2) NOT NULL ,
comm DECIMAL(7,2) NOT NULL ,
deptno int NOT NULL
);
CREATE TABLE salgrade(
grade int not null,
losal DECIMAL(17,2) NOT NULL ,
hisal DECIMAL(17,2) NOT NULL
)
补充一: Oracle函数
1、函数与存储过程的不同点
(1)、函数就是一个有返回值的过程,且是必须。
(2)、存储过程只能作为一个plsql语句调用,而函数不但可以作为plsql语句调用,符合约束的函数还可以作为sql表达式的一部分使用。
(3)、对于无参函数的定义和调用都没有圆括号,但无参存储过程需要。
2、函数与存储过程的相同点
(1)、都存储在数据库中,并且可在块中调用,代码都有定义部分、可执行部分、异常处理部分。
(2)、都有in,out,in out三种参数,都可以使用缺省值,都可以通过out模式返回一个或多个值。
(3)、都可以使用位置表示法和名称表示法。
二、函数参数的传递方式
1.无参函数
create or replace function fun_dtime return varchar2
as
begin
return to_char(sysdate,‘yyyy"年"mm"月"dd"日"’);
end;
调用
begin
dbms_output.put_line(fun_dtime);
end;
2.带输入输出参数的函数
create or replace function fun_info(i_eno number,o_title out varchar2,salch in out number) return varchar2
as
name emp.ename%type;
begin
select ename into name from emp where empno=i_eno;
update emp set sal=sal+salch where empno=i_eno returning job,sal into o_title,salch;
return name;
end;
调用
declare
v_eno number:=7369;
vn emp.ename%type;
vj emp.job%type;
vs emp.sal%type;
begin
vs:=100;
vn:=fun_info(v_eno,vj,vs);
dbms_output.put_line(‘姓名’ || vn || ‘岗位’ || vj || ‘新工资’ || vs);
end;
3.删除函数
drop function fun_info;
三、return语句
在函数内,是通过return语句来返回值的。函数体可以有多条return语句,但只能有一条被执行。函数结束时,还没有执行return语句会产生错误。
另外,return语句也可以使用在存储过程中,这种情况下它没有参数,当执行不带参数的return语句后,立刻结束并跳出存储过程,将out,in out形式的形参的当前值传给实参,并将控制权返回到调用环境。
四、函数在PLSQL中的使用
1、函数可在sql中的以下部分被调用:
select、where、having、connect by、start with、order by、group by、insert的values中、update的set中
2、被调用的函数满足以下限制:
1)、只能调用服务端函数,即是不能作为块的一部分。
2)、函数只能有输入参数,不能有out\in out。
3)、函数只能使用sql支持的标准数据类型,不能使用PL/SQL特有的数据类型。
4)、函数内不能包含DML语句。