Oracle中的存储过程简单例子
发布时间:2020-12-12 14:49:16 所属栏目:百科 来源:网络整理
导读:Oracle中的存储过程简单例子 原文地址:http://blog.csdn.net/o9109003234/article/details/24910039 --创建表 create table TESTTABLE ( id1 VARCHAR2(12), name VARCHAR2(32) ) select t.id1,t.name from TESTTABLE t insert into TESTTABLE (ID1,NAME) va
Oracle中的存储过程简单例子 原文地址:http://blog.csdn.net/o9109003234/article/details/24910039 --创建表 create table TESTTABLE( id1 VARCHAR2(12), name VARCHAR2(32) ) select t.id1,t.name from TESTTABLE t insert into TESTTABLE (ID1,NAME) values ('1','zhangsan'); insert into TESTTABLE (ID1,NAME) values ('2','lisi'); insert into TESTTABLE (ID1,NAME) values ('3','wangwu'); insert into TESTTABLE (ID1,NAME) values ('4','xiaoliu'); insert into TESTTABLE (ID1,NAME) values ('5','laowu'); ---创建存储过程 create or replace procedure test_count as v_total number(1); begin select count(*) into v_total from TESTTABLE; DBMS_OUTPUT.put_line('总人数:'||v_total); end; --准备 --线对scott解锁:alter user scott account unlock; --应为存储过程是在scott用户下。还要给scott赋予密码 ---alter user scott identified by tiger; ---去命令下执行 EXECUTE test_count; ----在ql/spl中的sql中执行 begin -- Call the procedure test_count; end; create or replace procedure TEST_LIST AS ---是用游标 CURSOR test_cursor IS select t.id1,t.name from TESTTABLE t; begin for Test_record IN test_cursor loop---遍历游标,在打印出来 DBMS_OUTPUT.put_line(Test_record.id1||Test_record.name); END LOOP; test_count;--同时执行另外一个存储过程(TEST_LIST中包含存储过程test_count) end; -----执行存储过程TEST_LIST begin TEST_LIST; END; ---存储过程的参数 ---IN 定义一个输入参数变量,用于传递参数给存储过程 --OUT 定义一个输出参数变量,用于从存储过程获取数据 ---IN OUT 定义一个输入、输出参数变量,兼有以上两者的功能 --这三种参数只能说明类型,不需要说明具体长度 比如 varchar2(12),defaul 可以不写,但是作为一个程序员最好还是写上。 ---创建有参数的存储过程 create or replace procedure test_param(p_id1 in VARCHAR2 default '0') as v_name varchar2(32); begin select t.name into v_name from TESTTABLE t where t.id1=p_id1; DBMS_OUTPUT.put_line('name:'||v_name); end; ----执行存储过程 begin test_param('1'); end; default '0' ---创建有参数的存储过程 create or replace procedure test_paramout(v_name OUT VARCHAR2 ) as begin select name into v_name from TESTTABLE where id1='1'; DBMS_OUTPUT.put_line('name:'||v_name); end; ----执行存储过程 DECLARE v_name VARCHAR2(32); BEGIN test_paramout(v_name); DBMS_OUTPUT.PUT_LINE('name:'||v_name); END; -------IN OUT ---创建存储过程 create or replace procedure test_paramINOUT(p_phonenumber in out varchar2) as begin p_phonenumber:='0571-'||p_phonenumber; end; ---- DECLARE p_phonenumber VARCHAR2(32); BEGIN p_phonenumber:='26731092'; test_paramINOUT(p_phonenumber); DBMS_OUTPUT.PUT_LINE('新的电话号码:'||p_phonenumber); END; -----sql命令下,查询当前用户的存储过程或函数的源代码, -----可以通过对USER_SOURCE数据字典视图的查询得到。USER_SOURCE的结构如下: SQL> DESCRIBE USER_SOURCE ; Name Type Nullable Default Comments ---- -------------- -------- ------- ------------------------------------------------------------------------------------------------------------- NAME VARCHAR2(30) Y Name of the object TYPE VARCHAR2(12) Y Type of the object: "TYPE","TYPE BODY","PROCEDURE","FUNCTION", "PACKAGE","PACKAGE BODY" or " Java SOURCE" LINE NUMBER Y Line number of this line of source TEXT VARCHAR2(4000) Y Source text SQL> ---查询出存储过程的定义语句 select text from user_source WHERE NAME='TEST_COUNT'; ----查询存储过程test_paramINOUT的参数 SQL> DESCRIBE test_paramINOUT; Parameter Type Mode Default? ------------- -------- ------ -------- P_PHONENUMBER VARCHAR2 IN OUT SQL> ---查看当前的存储过程的状态是否正确, ---VALID为正确,INVALID表示存储过程无效或需要重新编译 SELECT STATUS FROM USER_OBJECTS WHERE OBJECT_NAME='TEST_COUNT'; -----如果要检查存储过程或函数的依赖性,可以通过查询数据字典USER_DENPENDENCIES来确定,该表结构如下: SQL> DESCRIBE USER_DEPENDENCIES; Name Type Nullable Default Comments -------------------- ------------- -------- ------- ---------------------------------------------------------- NAME VARCHAR2(30) Name of the object TYPE VARCHAR2(17) Y Type of the object REFERENCED_OWNER VARCHAR2(30) Y Owner of referenced object (remote owner if remote object) REFERENCED_NAME VARCHAR2(64) Y Name of referenced object REFERENCED_TYPE VARCHAR2(17) Y Type of referenced object REFERENCED_LINK_NAME VARCHAR2(128) Y Name of dblink if this is a remote object SCHEMAID NUMBER Y DEPENDENCY_TYPE VARCHAR2(4) Y SQL> ---查询存储过程TEST_COUNT的依赖关系 SELECT REFERENCED_NAME,REFERENCED_TYPE FROM USER_DEPENDENCIES WHERE NAME='TEST_COUNT'; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |