oracle存储过程output
❶ 关于调用带输出参数的oracle存储过程
可以通过以下方式来进行带参数存储过程执行。
sql">SQL>createorreplaceproceresp_pro10
2(spnoinnumber,spnameoutvarchar2)is
3begin
4select'ename'intospnamefromal;
5end;
6/
过程已创建。
SQL>setserveroutputon
SQL>DECLARE
2spnonumber;
3spnamevarchar2(10);
4BEGIN
5sp_pro10(spno,spname);
6
7dbms_output.put_line(spname);
8END;
9/
ename
PL/SQL过程已成功完成。
❷ Oracle存储过程怎么返回结果
这个存储过程你可以在TEST的环境下查看结果,不过你需要隐式游标来进行操作,那样才能看到,具体步骤如下:
1、首先我们要借助游标,因此需要先定义一个返回类型的游标
create or replace package type_difinition
as
type mycursor is ref cursor;
end type_difinition;
2、改写你的存储过程,要想查看执行SQL后结果需要一个返回参数,这个参数即上面定义的游标
类型
create or replace procere select_pro(
p_result out type_difinition.mycursor -- 返回结果
)
is
syn_sql varchar2(200) default '';
begin
syn_sql := 'select * from emp';
-- 此处打开游标,并把需执行的SQL赋值给游标
open p_result for syn_sql;
end select_pro;
3、执行编译通过后,右键点击存储过程的名字,跳出框,选择Test一项,进入Test界面
4、点击编译、再点击执行
5、Test界面的底部界面,有个Variable Type value的列表,此时你可以点击Value值里面的
... 按钮,即可查看结果,由于不怎么会应用这个编辑器,本想把图片上传给你,如有不解,再详问,希望回答对楼主有帮助
❸ oracle 数据库中存储过程输出情况
1、编写存储过程,
create or replace procere test_pro(in_num number)
as
M number;
begin
M := in_num;
if 0 < M then
dbms_output.put_line('输出SQL语句1');
elsif M < 3 then
dbms_output.put_line('输出SQL语句2');
else
dbms_output.put_line('nothing');
end if;
end;
❹ Oracle 求一存储过程带输入输出参数 并且调用的实例
下面的例子代码, 仅仅用于演示 in out , 没有任何数据库检索的处理。
注:
Oracle的INOUT写在变量名后面。
SQL>(
2p_user_nameINVARCHAR2,
3p_out_valOUTVARCHAR2,
4p_inout_valINOUTVARCHAR2
5)AS
6BEGIN
7dbms_output.put_line('Hello'||p_user_name||p_inout_val||'!');
8p_out_val:='A';
9p_inout_val:='B';
10ENDHelloWorld2;
11/
Procerecreated.
SQL>DECLARE
2p_outvalVARCHAR2(10);
3p_inoutvalVARCHAR2(10):='~Hi~';
4BEGIN
5HelloWorld2('Edward',p_outval,p_inoutval);
6
7dbms_output.put_line('p_outval='||p_outval);
8dbms_output.put_line('p_inoutval='||p_inoutval);
9END;
10/
HelloEdward~Hi~!
p_outval=A
p_inoutval=B
PL/.
SQL>
❺ ORACLE中如何为存储过程传递参数
给你一个 传递参数的例子
SQL> CREATE OR REPLACE PROCEDURE HelloWorld2 (
2 p_user_name IN VARCHAR2,
3 p_out_val OUT VARCHAR2,
4 p_inout_val IN OUT VARCHAR2
5 ) AS
6 BEGIN
7 dbms_output.put_line('Hello ' || p_user_name || p_inout_val || '!');
8 p_out_val := 'A';
9 p_inout_val := 'B';
10 END HelloWorld2;
11 /
Procere created.
SQL> DECLARE
2 p_outval VARCHAR2(10);
3 p_inoutval VARCHAR2(10) := '~Hi~';
4 BEGIN
5 HelloWorld2('Edward', p_outval, p_inoutval);
6
7 dbms_output.put_line('p_outval=' || p_outval);
8 dbms_output.put_line('p_inoutval=' || p_inoutval);
9 END;
10 /
Hello Edward~Hi~!
p_outval=A
p_inoutval=B
PL/SQL procere successfully completed.
SQL>
❻ 如何把oracle 存储过程 输出到文本
分几个步骤
1,创建输出路径,比如你要在c盘test目录下输出,你就先要建立好这个test路径
2,sqlplus下以sysdba登录,执行以下语句
3,create or replace directory TMP as 'c: est'
4,grant read,write on directory TMP to 你要生成文件的用户;
5,alter system set utl_file_dir='c: est' scope=spfile;
以上步骤执行完,需要重启数据库
6,最重要的一步开始了,创建存储过程
createorreplacePROCEDURESP_OUTPUT
is
file_handleutl_file.file_type;
Write_contentVARCHAR2(1024);
Write_file_nameVARCHAR2(50);
v_idint;
v_formvarchar2(10);
cursorcur_sp_out
is
selectid,formfroma;
begin
opencur_sp_out;
loop
fetchcur_sp_outintov_id,v_form;
exitwhencur_sp_out%notfound;
write_file_name:=to_char(SYSDATE,'MMDD')||'.txt'
file_handle:=utl_file.fopen('TMP',write_file_name,'a');
write_content:=v_id||''||v_form;
--writefile
IFutl_file.is_open(file_handle)THEN
utl_file.put_line(file_handle,write_content);
ENDIF;
--closefile
utl_file.fclose(file_handle);
endloop;
closecur_sp_out;
end;
我建立了一个跟你一样的测试表,数据如下
createtablea(idint,
formvarchar2(10));
insertintoavalues(1,'你好');
insertintoavalues(2,'你很好');
然后执行存储过程
begin
SP_OUTPUT;
end;
执行完毕后,你在c盘test路径下会发现已经有新文件生成
文件内容
存储过程的话,如果表名和字段名跟你一致的话,你无须修改
❼ oracle中怎么执行带有输出参数的存储过程,在程序中我知道怎么调用,
1、新建一个存储过程(Procere)。
❽ oracle存储过程如何输出信息
可用DBMS_OUTPUT.PUT_LINE()对存储过程的进行输出。
编写存储过程:
create or replace procere test_pro(in_num number)
as
M number;
begin
M := in_num;
if 0 < M then
dbms_output.put_line('输出SQL语句1');
elsif M < 3 then
dbms_output.put_line('输出SQL语句2');
else
dbms_output.put_line('nothing');
end if;
end;
(8)oracle存储过程output扩展阅读;
存储在数据库的数据字典中,存储在当前的应用中安全性由数据库提供安全保证,必须通过授权才能使用存储子程序,安全性靠应用程序来保证,如果能执行应用程序,就能执行该子程序。模式描述IN参数用来从调用环境中向存储过程传递值,不能给IN参数赋值,给此参数传递的值可以是常量、有值的变量、表达式等。
❾ oracle写一个存储过程输出一个菱形
create
or
replace
procere
print(hi
int)
is
begin
for
i
in
1
..
hi
loop
for
j
in
1
..
hi
*
2
loop
if
j
=
hi
-
i
+
1
or
j
=
hi
+
i
-
1
then
dbms_output.put('*');
else
dbms_output.put('
');
end
if;
end
loop;
dbms_output.put_line('');
end
loop;
for
i
in
1
..
hi
loop
for
j
in
1
..
hi
*
2
loop
if
j
=
i
or
j
=
hi
*
2
-
i
then
dbms_output.put('*');
else
dbms_output.put('
');
end
if;
end
loop;
dbms_output.put_line('');
end
loop;
end;
以上为创建存储过程语句。
参数hi
为菱形的半高。
创建完成以后,在菱形窗口
set
serveroutput
on
exec
print(10)即可打印。
❿ oracle存储过程并且怎么写
存储过程(procere):是一个命名了的语句块,可以有0个或多个参数
语法:
create or replace procere HelloWorld
as
begin
dbms_output.put_line('HelloWorld');
end;
调用存储过程
* 命令调用 exec helloworld
* 语句块调用
begin
helloworld;
end;
/
DELETE:
create or replace procere del_emp01
is
begin
delete from emp01 where empno=7369;
end;
exec del_emp01;
create or replace procere del_emp01(v_empno in emp01.empno%type)
is
begin
delete from emp01 wherer empno=v_empno;
end;
exec del_emp01(7521);
INSERT
create or replace procere ins_emp01
(v_empno emp01.empno%type,v_ename emp01.ename%type)
as
begin
insert into emp01(empno,ename) values(v_empno,v_ename);
end;
exec ins_emp01(1000,'李四');
UPDATE
create or replace procere upd_emp01
(v_empno emp01.empno%type,v_ename emp01.ename%type)
as
begin
update emp01 set ename=v_ename where empno=v_empno;
end;
exec upd_emp01(1000,'张三');
SELECT
create or replace procere sel_emp01
(v_empno emp01.empno%type,v_emp01_data out emp01%rowtype)
as
begin
select * into v_emp01_data from emp where empno=v_empno;
end;
带有输出参数的存储过程不能使用命令直接调用
只能由语句块或程序调用(JAVA) ****************************************************************
declare
v_emp_data emp01%rowtype;
begin
sel_emp01(7499,v_emp_data);
dbms_output.put_line(v_emp_data.ename||' '||v_emp_data.sal);
end;
调用:
declare
v_emp_data emp01%rowtype;
begin
sel_emp01(7499,v_emp_data);
dbms_output.put_line(v_emp_data.ename||' '||v_emp_data.sal);
end;
使用scott用户登录
统计某个部门的员工的工资总和,员工的人数,平均工资,创建存储过程
create or replace procere deptcount
(v_deptno emp.deptno%type,v_sal_sum out number,v_recordes out number,v_avg_sal out number,errorMsg out varchar2)
is
begin
select sum(sal) into v_sal_sum from emp group by deptno having deptno=v_deptno;
select count(*) into v_recordes from emp group by deptno having deptno=v_deptno;
select avg(sal) into v_avg_sal from emp group by deptno having deptno=v_deptno;
exception
when no_data_found then
errorMsg:='没有该部门';
end;
调用:
declare
v_sal_sum number;
v_recordes number;
v_avg_sal number(8,2);
v_errormsg varchar2(20);
begin
deptcount(90,v_sal_sum,v_recordes,v_avg_sal,v_errormsg);
dbms_output.put_line(v_sal_sum||' '||v_recordes||' '||v_avg_sal);
dbms_output.put_line(v_errormsg);
end;
//输出参数
create or replace procere my_pro(v_num in number,v_result out number)
is
v_temp number;
begin
v_temp:=0;
for i in 1..v_num
loop
v_temp:=v_temp+i;
end loop;
v_result:=v_temp;
end;
declare
v_recieve number;
begin
my_pro(100,v_recieve);
dbms_output.put_line(v_recieve);
end;
//既是输入参数又是输出参数
create or replace procere my_pro1(v_i in out number)
is
v_j number;
begin
v_j:=30;
v_i:=v_i*v_j;
end;
declare
v_t number;
begin
v_t:=20;
my_pro1(v_t);
dbms_output.put_line(v_t);
end;