當前位置:首頁 » 存儲配置 » oracle存儲過程output

oracle存儲過程output

發布時間: 2022-08-09 23:53:43

❶ 關於調用帶輸出參數的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;

熱點內容
安卓手機最早什麼時候出現的 發布:2022-10-06 05:31:51 瀏覽:429
方舟怎麼設置伺服器 發布:2022-10-06 05:17:00 瀏覽:506
怎麼打開加密圖片 發布:2022-10-06 05:14:12 瀏覽:15
phpsmartyinclude 發布:2022-10-06 05:12:27 瀏覽:452
壓縮包比例 發布:2022-10-06 05:12:24 瀏覽:12
myeclipse導入sql 發布:2022-10-06 05:09:53 瀏覽:183
房車外部有哪些配置 發布:2022-10-06 05:06:32 瀏覽:395
chromejs腳本 發布:2022-10-06 05:04:20 瀏覽:869
eclipse編譯亂碼 發布:2022-10-06 04:58:52 瀏覽:857
可以存儲數據的 發布:2022-10-06 04:58:32 瀏覽:318