oracle学习总结--存储过程
来源:互联网 发布:matlab 遗传算法 编辑:程序博客网 时间:2024/05/29 04:45
1、存储过程的创建CREATE OR REPLACE PROCEDURE [存储过程名][(输入、输出参数)] AS/IS[变量、游标声明]BEGIN[执行体]END;create or replace procedure sayHello --无参数时()不需要写asbegin dbms_output.put_line('say hello');end;AS|IS:不能省略 在视图(VIEW)创建中只能用AS不能用IS;在游标(CURSOR)声明中只能用IS不能用AS。/*create table TABLE1( user_id VARCHAR2(10), user_name VARCHAR2(10), user_mail VARCHAR2(10), user_mobile VARCHAR2(10), user_telephone VARCHAR2(10));*/CREATE OR REPLACE PROCEDURE CREATEVIEWS IS V_SQL VARCHAR2(10240);BEGIN V_SQL := 'CREATE OR REPLACE VIEW V_TEST AS --创建视图用AS 使用IS执行时报错 SELECT T1.USER_ID, T1.USER_NAME, --用户姓名 T1.USER_MAIL, --用户MAIL T1.USER_MOBILE, --用户手机 T1.USER_TELEPHONE --用户电话 FROM TABLE1 T1'; EXECUTE IMMEDIATE V_SQL;END CREATEVIEWS;-------------------------------------------------------------------------/*CREATE SEQUENCE MYSEQUENCE MINVALUE 1 MAXVALUE 999999999999999999999999999 START WITH 1 INCREMENT BY 1 CACHE 20; CREATE TABLE MYTABLE (DNO NUMBER(6) PRIMARY KEY,DNAME VARCHAR2(14),LOC VARCHAR2(13));CREATE OR REPLACE PROCEDURE MAKE_DATAASX NUMBER;s_sql varchar2(1000);BEGIN X:=0; dbms_output.put_line(X); WHILE X<9 LOOP X:=X+1; s_sql:='INSERT INTO MYTABLE VALUES(MYSEQUENCE.nextval,''namex'||X||''',''namex'||X||''')'; dbms_output.put_line(s_sql); execute immediate s_sql; dbms_output.put_line(s_sql); END LOOP; commit;END MAKE_DATA;exec MAKE_DATA(); --MYTABLE插入数据*/CREATE OR REPLACE PROCEDURE CURSOR_TESTASr1 MYTABLE%ROWTYPE;CURSOR cur IS SELECT * FROM MYTABLE;--创建游标只能是IS 使用AS编译报错BEGIN OPEN cur; LOOP fetch cur into r1; exit when cur%notfound; dbms_output.put_line(r1.DNAME); END LOOP; CLOSE cur;END CURSOR_TEST;2、存储过程的执行 1. exec CURSOR_TEST(); 2. BEGIN CURSOR_TEST(); END;3、查询存储过程--查看存储过程的sql语句SELECT text FROM user_source WHERE NAME = 'COUNT_NUMBER'ORDER BY line;注意oracle存储过程名都是大写??你在oracle 创建对象的时候, 如果没有加双引号, 默认都会转成大写的。 在用这些对象的时候, 是不区分大小写的。 但是你差的视图, 他以字符串的形式存的,当然就会区分大小写了,就跟你查询正常的表记录一样。 create table mytable(a int) ; create table "mytable" (a int) ; -- 会创建两张表, 上面的会转成大写,下面的不转。ALL_SOURCE 视图和DBA_SOURCE 视图具有USER_SOURCE 数据字典视图中的所有列和一个附加的Owner 列(对象的所有者)。ALL_SOURCE 数据字典视图可用于显示用户能够访问的所有过程对象的源代码,而不管所有者是谁。DBA_SOURCE 数据字典视图列出了数据库中所有用户的源代码。4、删除存储过程drop PROCEDURE [存储过程名];drop PROCEDURE CREATEVIEWS;5、查看存储过程编译报错。。1.查看存储过程编译报错,如果编译过程中有报错会记录到SYS.USER_ERRORS表中每次编译 会更新表中的编译报错内容。没有记录说明编译通过。select * from SYS.USER_ERRORS where NAME = upper('COUNT_NUMBER');2.SQL DEVELOPER中可以在编译报错的存储过程上右击选中Edit6、存储过程和函数的区别相同点:1.创建语法结构相似,都可以携带多个传入参数和传出参数。 2.都是一次编译,多次执行。不同点:1.存储过程定义关键字用procedure,函数定义用function。 2.存储过程中不能用return返回值,但函数中可以,而且函数中必须有return子句。 3.执行方式略有不同,存储过程的执行方式有两种(1.使用execute2.使用begin和end), 函数除了存储过程的两种方式外,还可以当做表达式使用,例如放在select中(select f1() form dual;)。总结:如果只有一个返回值,用存储函数,否则,一般用存储过程。一个函数的例子:create or replace function f1return varchar--必须有返回值,且声明返回值类型时不需要加大小as msg varchar(50);begin msg := 'hello world'; return msg;end;--执行函数方式1select f1() from dual;--执行函数方式2set serveroutput on;begin dbms_output.put_line(f1());end;7、总结:1.创建存储过程的关键字为procedure。2.传参列表中的参数可以用in,out,in out修饰,参数类型一定不能写大小。列表中可以有多个输入输出参数。3.存储过程中定义的参数列表不需要用declare声明,声明参数类型时需要写大小的一定要带上大小。4.as可以用is替换。5.调用带输出参数的过程必须要声明变量来接收输出参数值。6.执行存储过程有两种方式,一种是使用execute,另一种是用begin和end包住。存储过程虽然有很多优点,但是它却不能使用return返回值。当需要使用return返回值时,我们可以使用函数。
阅读全文
0 0
- oracle 存储过程学习总结
- oracle学习总结--存储过程
- Oracle存储过程总结
- Oracle存储过程总结
- oracle存储过程总结
- Oracle存储过程总结
- Oracle存储过程总结
- Oracle存储过程学习
- Oracle存储过程学习
- Oracle存储过程学习
- oracle 存储过程学习
- Oracle存储过程学习
- Oracle存储过程学习
- Oracle存储过程学习
- Oracle存储过程学习
- Oracle存储过程学习
- Oracle存储过程学习
- Oracle存储过程学习
- count慢的问题解决
- 原型模式【Prototype Pattern】
- Spring框架自学之路——简易入门
- Android Native 崩溃日志收集
- 使用fiddler抓取HTTPS协议数据与疑难杂症终极解决方案
- oracle学习总结--存储过程
- css遮罩层及遮罩层gif图片居中
- 开启openoffice指令
- linux 压缩和解压
- 腾讯云直播~下
- linux下面tomcat8启动慢的问题
- 前端Js框架汇总
- [一天几个linux命令] head
- libevent详解