oracle数据库高级编程(六)


--创建或替换一个存储过程,in只读,out只写,in out可读可写,默认情况是in
--如果是in即不可以bg:=x;不能赋值。
CREATE OR REPLACE PROCEDURE cg1(x NUMBER,y NUMBER,bg out NUMBER)
iS
BEGIN
IF x > y THEN
bg:=x;
ELSE bg:=y;
END IF;
END;
DROP PROCEDURE cg1;
--调用存储过程cg1,声明变量用来接受赋值后的bg
DECLARE
big NUMBER;
BEGIN
cg1(20,30,big);
dbms_output.put_line(big);
END;

--创建一个空表
CREATE TABLE test0(
tid NUMBER PRIMARY KEY,
NAME VARCHAR2(10) NOT NULL
);
--创建一个序列
CREATE SEQUENCE tes0;
--创建一个存储过程,若不带参数则不用括号cu0()
CREATE OR REPLACE PROCEDURE cu0
IS
BEGIN
INSERT INTO test0 VALUES(tes0.nextval,'测试'||tes0.currval);
END;
--创建一个定时任务隔10秒往test0中插入一条数据
--参数一:任务编号只能是整型,且是系统生成的所以要声明变量去接住如:tid
--参数二:存储过程必须要加();且是varchar类型的所以要'();'
--参数三:任务开始执行的时间是date类型
--参数四:任务执行的相隔时间,可以用sysdate-1的形式,这里减一是一天的意思,如果要小时就是1/24,分钟1/(24*60),秒就是1/(24*60*60),是varchar类型
DECLARE
tid BINARY_INTEGER;
BEGIN
--这里是相隔10秒执行一次
dbms_job.submit(tid,'cu0();',SYSDATE,'sysdate + 10/(24*60*60)');
--执行任务
dbms_job.run(tid);
END;
--查看是否10s增一条数据
SELECT * FROM test0 FOR UPDATE;
--移除任务,可以在dbms_jobs中看到自己的任务编号
BEGIN
dbms_job.remove(23);
END;

/*创建一个函数,并声明函数返回值的类型,
如果函数中X需要在函数过程中赋值,
加上hss(x number in out)
*/
CREATE OR REPLACE FUNCTION hss(x NUMBER) RETURN VARCHAR2
AS
BEGIN
IF x >10 THEN
RETURN '此时X大于10';
ELSE RETURN '此时X小于10';
END IF;
END;
--调用函数并给函数传值
DECLARE
BEGIN
dbms_output.put_line(hss(9));
END;







