存储过程基础不在这说了。
第一步先创建存储过程的包体:
create or replace package pk_test_2 as
procedure etl(curDate out varchar);
procedure test_gs(age2 in varchar);
end pk_test_2;
说明:
pk_test_2 是包名
etl 是第一个存储过程名字
test_gs 是第二个存储过程名字
out 代表输出参数
in 代表输入参数
第二步再创建包体内容:
createi or replace package body pk_test_2 is
PROCEDURE ETL(CURDATE out VARCHAR)
AS
temp varchar(30);
BEGIN
select count(*) into CURDATE from G_INFO;
END ETL;
procedure test_gs(age2 in varchar)
as
csum varchar2(10) :=0;
begin
ETL(csum);
-- insert into GS_TEST(ID_,NAME,SEX,AGE) values(GS_TEST_SEQUENCE.NEXTVAL,sysdate,sysdate,sysdate);
dbms_output.put_line('date:'|| csum );
commit;
end test_gs;
end;
说明:
第一个存储过程是查询 pppinfo 表的总是,在赋值给 CURDATE 变量。
在test_gs 存储过程中 ETL(csum); 这种写法 就可以直接调用第一个存储过程。 第一个存储过程参数中 使用了 out,表示输出参数,故在第二个存储过程中需要声明一个变量 csum 用来接收。
dbms_output.put_line 是打印语句,可以使用PL/SQL 工具。在DBMS输出 选项中 可以看到输出结果。
如图
执行此存储过程
DBMS输出 :
再把第一个存储过程里面的sql语句拿出来测下,看总数是多少
总数也是9 ,说明 同一个包内,存储过程是可以如此调用。