定义:存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句 集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数 (如果该存储过程带有参数)来执行它。
存储过程是数据库中的一个重要 对象,任何一个设计良好的数据库应用程序都应该用到存储过程。
存储过程是由流控制和SQL 语句书写的过程,这个过程经编译和优化后 存储在数据库服务器中,应用程序使用时只要调用即可。在ORACLE 中, 若干个有联系的过程可以组合在一起构成程序包。
优点:存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.当对数据库进行复杂操作时(如对多个表进行Update、Insert、Query、Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3.存储过程可以重复使用,可减少数据库开发人员的工作量。
4.安全性高,可设定只有某用户才具有对指定存储过程的使用权。你还是给我点分啥,写得我手都酸痛了。
使用oracle的一般都装了PL/SQL吧,对象窗口,找到对应的函数或者存储过程,右键查看或编辑。
一般单个我是这么用,如果很多的话可以参考一下网上提供的方法:
oracle 导出一个用户下的所有存储过程
方法一:
set echo off ;
set heading off ;
set feedback off ;
spool d:\tmp.txt
select text from user_source ;
spool off;
方法二:
使用PL/SQL 菜单 Tools --> Export user objects... ,对弹出的dialog中选择user和output file,选中要导出的内容,点击export导出就行了
这个过程就行了。。
create or replace procedure wymauthid current_useris vn_ctn number(2)
;begin select count(*) into vn_ctn from user_all_tables a where a.table_name like upper('invbasdoc')
; if vn_ctn > 0 then execute immediate 'drop table invbasdoc'
; end if; execute immediate 'create table invbasdoc as select * from test_abcd'
;end ;原来的过程中:execute immediate 'drop table invbasdoc'; 当如果数据库中不存在这张表的时候就会报错的。。上面是对数据库中是否存在表进行了判断,因此能够避免“表不存在”这样的错误。。
不需要execute,直接写dbms_stats.gather_table_stats(就可以,而且专门写个存储过程没意义。
首先需要授权
sqlplus / as sysdba
grant create view to your_user;
然后创建表和存储过程
drop table table1;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 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;/
执行,OK
SQL> exec createviews;PL/SQL procedure successfully completed
可用语句查看或用第三方工具查看。
一、语句查看方法:
1、执行语句:
SELECT text FROM user_source WHERE NAME = 'Procedure Name'ORDER BY line;--其中Procedure Name为存储过程名字,需要全部用大写英文。
2、如要查P_TEST的存储过程:
SELECT text FROM user_source WHERE NAME = 'P_TEST'ORDER BY line;
3、内容如下:
二、工具查看:
1、登录第三方工具(如pl/sql)登录到指定数据库。
2、左侧树中找到Procedures,然后找到相应的存储过程。
3、右键该存储过程,选择“查看”。
4、然后就可以看到了。
从参数的返回情况来看:
如果返回多个参数值最好使用存储过程,如果只有一个返回值的话可以使用函数;
从调用情况来看:
如果在SQL语句(DML或SELECT)中调用的话一定是存储函数或存储的封装函数不可以是存储过程,但调用存储函数的时候还有好多限制以及函数的纯度等级的问题,你可以参考《ORACLE 9I PL\SQL程序设计》(机械工业出版社);
如果是在过程化语句中调用的话,就要看你要实现什么样的功能。函数一般情况下是用来计算并返回一个计算结果而存储过程一般是用来完成特定的数据操作(比如修改、插入数据库表或执行某些DDL语句等等),所以虽然他们的语法上很相似但用户在使用他们的时候所需要完成的功能大部分情况下是不同的。
我的回答:oracle存储过程是编译好的并且存储在数据库服务器中的程序代码。存储过程有名字及自己的参数,但是存储过程没有返回值。一个存储过程就是一组命名的PL/SQL语句。
这个存储过程你可以在TEST的环境下查看结果,不过你需要隐式游标来进行操作,那样才能看到,具体步骤如下:
1、首先我们要借助游标,因此需要先定义一个返回类型的游标createorreplacepackagetype_difinitionastypemycursorisrefcursor;endtype_difinition;
2、改写你的存储过程,要想查看执行SQL后结果需要一个返回参数,这个参数即上面定义的游标类型createorreplaceprocedureselect_pro(p_resultouttype_difinition.mycursor--返回结果)issyn_sqlvarchar2(200)default'';beginsyn_sql:='select*fromemp';--此处打开游标,并把需执行的SQL赋值给游标openp_resultforsyn_sql;endselect_pro;
3、执行编译通过后,右键点击存储过程的名字,跳出框,选择Test一项,进入Test界面4、点击编译、再点击执行5、Test界面的底部界面,有个VariableTypevalue的列表,此时你可以点击Value值里面的...按钮,即可查看结果,由于不怎么会应用这个编辑器,本想把图片上传给你,如有不解,再详问,希望回答对楼主有帮助
建议使用PowerDesigner将ORACLE转换为物理模型,再转换为逻辑模型,然后通过这个逻辑模型重新选择DBMS(MYSQL),将其转换为MYSQL的物理逻辑模型,在物理逻辑模型上更新触发器,过程等对象,然后生成MYSQL的物理文件,或直接导入到MYSQL数据库实例中。