Oracle中的存储过程简单例子

--创建表
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');
 
drop procedure test_count   -- 删除存储过程

						---创建存储过程  1
						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;

				---创建存储过程  2
				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;
						
      ---存储过程的参数
      ---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;
			
				---创建有参数的存储过程
      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     
				---创建存储过程
				--p_phonenumber 入参后变成新p_phonenumber,跟着调用该存储过程可以得到最新的p_phonenumber
			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;

 
			---查询存储过程TEST_COUNT的依赖关系
      SELECT REFERENCED_NAME,REFERENCED_TYPE FROM USER_DEPENDENCIES WHERE NAME='TEST_COUNT';
			

展开阅读全文

没有更多推荐了,返回首页