CREATEORREPLACEPROCEDURE test1 --关键字用来创建或者覆盖一个已有的存储过程 AS BEGIN dbms_output.put_line('hello word, my name is stored procedure');--输出打印语句 END;
存储过程的调用
针对上面创建的存储过程我们进行调用,有多种调用的写法。
1 2 3 4
DECLARE BEGIN test1; --在此处完成存储过程的调用 END;
1 2 3
BEGIN test1; END;
1
CALL test1();
变量的申明和赋值
1 2 3 4 5 6 7 8 9
CREATEORREPLACEPROCEDURE test2 AS NAME VARCHAR2(100);--变量申明,注意VARCHAR需要指定长度 AGE INT; BEGIN NAME:='ROSS';--变量赋值 AGE:=18; dbms_output.put_line('name='||name||', age='||age);--通过||符号达到连接字符串的功能 END;
带参数的存储过程
1 2 3 4 5
CREATEORREPLACEPROCEDURE test3(namein varchar2(100),age inint) --in表示入参 AS BEGIN dbms_output.put_line('name='||name||', age='||age); END;
1 2 3
BEGIN test3('ross',18);--调用存储过程时传入参数 END;
in,out参数问题
1 2 3 4 5 6
CREATEORREPLACEPROCEDURE test4(nameout varchar2(100),age inint)--in代表输入,out用于输出 AS BEGIN dbms_output.put_line('age='||age); select'ross'intonamefrom dual;--将查询出的结果映射到出参name END;
1 2 3 4 5 6 7
DECLARE name varchar2(100); age int; BEGIN test4(name=>name,age=>10); dbms_output.put_line('name='||name); END;
异常问题
1 2 3 4 5 6 7 8 9
CREATEORREPLACEPROCEDURE test5 AS age int; BEGIN age:=10/0;--除数为0 dbms_output.put_line(age); EXCEPTION WHEN OTHERS THEN--捕获异常并进行处理 dbms_output.put_line('error'); END;
select trunc(sysdate,'dd') from dual;--返回当前日期,并且去除时分秒 select trunc(sysdate,'yy') from dual;--返回当年第一天 select trunc(sysdate,'mm') from dual;--返回当月第一天 select trunc(sysdate,'d') from dual;--返回当前周第一天
针对数字:
1 2 3
select trunc(55.5,-1) from dual;--负1表示从小数点左边第一位截取后面全为0,结果为50 select trunc(55.55,1) from dual;--1表示小数点后的保留位数,结果为55.5 select trunc(55.55) from dual;--截取整数部分,结果为55
add_months()函数
1 2
select add_months(sysdate,2) from dual;--表示两个月以后的时间 select add_months(sysdate,-2) from dual;--表示两个月以前的时间
coalesce()函数
1
selectcoalesce(expression1,espression2,expression3) from dual;
返回参数中第一个不为空的值,如果所有表达式均为空值,最终返回一个空值。
decode()函数
1
selectdecode(column1,case1,value1,case2,value2,value3) from dual;