當前位置:首頁 » 存儲配置 » oracle存儲過程變數輸出

oracle存儲過程變數輸出

發布時間: 2023-02-18 15:04:56

❶ 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;

(1)oracle存儲過程變數輸出擴展閱讀;

存儲在資料庫的數據字典中,存儲在當前的應用中安全性由資料庫提供安全保證,必須通過授權才能使用存儲子程序,安全性靠應用程序來保證,如果能執行應用程序,就能執行該子程序。模式描述IN參數用來從調用環境中向存儲過程傳遞值,不能給IN參數賦值,給此參數傳遞的值可以是常量、有值的變數、表達式等。

❷ oracle存儲過程導出數據到文件數據出現

在存儲過程中,我們經常會使用dbms_output來輸出一些調試信息到控制台,方便查看。在使用PLSQL DEV的過程中,經常會遇到緩沖區太小的情況,如果你要顯示的內容比較多的話。這個時候我們可以使用oracle提供的UTL_FILE包來實現將這些信息輸出到一個文本文件中。

操作說明
創建一個目錄(需要管理員許可權)
注意:這里創建的目錄是創建在oracle伺服器上,在執行上述SQL後,需要手動建立相關目錄,否則使用時會報錯。
授權給使用存儲過程的用戶
存儲過程中使用

❸ plsql調用oracle存儲過程有輸入參數和輸出參數 sql語句怎麼寫如題 謝謝了

假設第一個參數為in參數,每二個參數為out參數:
variable
x
number;
//定義一個綁定變數
exec
過程(1,:x)
//1為輸入參數,x為輸出參數,過程執行後x就得到輸出值了。
print
x
//看結果

❹ 如何把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路徑下會發現已經有新文件生成


文件內容


存儲過程的話,如果表名和欄位名跟你一致的話,你無須修改

❺ oci 調用oracle 存儲過程 中取出輸出變數的 問題,求親們解決

公共靜態的CallableStatement callprol2(SQL字元串,字元串輸入參數,整型輸出參數[]){
?康恩= getConn();
?嘗試{
?CS = conn.prepareCall(SQL);
?如果(inparameters! = NULL){
??為(int i = 0;我<inparameters.length,我+ +){
??cs.setObject(i +1,輸入參數[I]);
???
??}
??
?}
??/ /
??/ /輸出參數賦值
?如果(outparameters! = NULL){
??為(int i = 0;我<outparameters.length,我+ +){
??cs.registerOutParameter(inparameters.length +1 + I,輸出參數[I]);
???
??}
??
?} Cs.execute();
?}(SQLException的E){
??/ / TODO自動生成的catch塊
??e.printStackTrace();
??拋出新的RuntimeException(e.getMessage());
?}

?返回CS;


?}
我唯一??的Java版本

❻ 關於調用帶輸出參數的oracle存儲過程

可以通過以下方式來進行帶參數存儲過程執行。

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存儲過程基本語法

一:存儲過程

創建存儲過程,需要有CREATE PROCEDURE或CREATE ANY PROCEDURE的系統許可權   

刪除存儲過程,是過程的創建者或者擁有DROP ANY PROCEDURE系統許可權 

修改存儲過程,則只能是過程的創建者或者擁有ALTER ANY PROCEDURE系統許可權的人

執行(或調用)存儲過程,是過程的創建者或是擁有EXECUTE ANY PROCEDURE系統許可權的人或是被擁有者授予EXECUTE許可權的人

1:語法

 1)創建

CREATE[ORREPLACE]PROCEDURE存儲過程名[(參數[IN|OUT|INOUT] 數據類型...)]

{AS|IS}

[說明部分]

BEGIN

可執行部分

[EXCEPTION

錯誤處理部分]

END[過程名];

 說明:

   OR REPLACE 表示如果存在就覆蓋存儲過程

   參數有三種形式:IN、OUT和IN OUT。則默認為IN。

  關鍵字AS也可以寫成IS,後跟過程的說明部分,可以在此定義過程的局部變數。

2)刪除存儲過程:

DROP PROCEDURE 存儲過程名;

3)修改存儲過程:

      ALTER PROCEDURE 存儲過程名 COMPILE; 

4)執行存儲過程

      EXECUTE 模式名.存儲過程名[(參數...)]; 

     或

       BEGIN 

模式名.存儲過程名[(參數...)];

END;

另外:參數可以是變數、常量或表達式

 要其它用戶執行存儲過程須要給其它用戶授權

GRANT EXECUTE ON 存儲過程名 TO 用戶名

 2:參數說明

IN 定義一個輸入參數變數,用於傳遞參數給存儲過程

OUT 定義一個輸出參數變數,用於從存儲過程獲取數據

IN OUT 定義一個輸入、輸出參數變數,兼有以上兩者的功能

 1)參數名 IN 數據類型 DEFAULT 值;

          定義一個輸入參數變數,用於傳遞參數給存儲過程。

          可以是常量、有值變數或表達式

          DEFAULT 關鍵字為可選項,用來設定參數的默認值。如果在調用存儲過程時不指明參數,則參數變數取默認值

          在存儲過程中,輸入變數接收主程序傳遞的值,但不能對其進行賦值。

2)參數名 OUT 數據類型;

          定義一個輸出參數變數,用於從存儲過程獲取數據,即變數從存儲過程中返回值給主程序。

          在調用存儲過程時,主程序的實際參數只能是一個變數,而不能是常量或表達式。

          在存儲過程中,參數變數只能被賦值而不能將其用於賦值,而且必須給輸出變數至少賦值一次。

3)參數名 IN OUT 數據類型 DEFAULT 值; 

          定義一個輸入、輸出參數變數,兼有以上兩者的功能。

          在調用存儲過程時,主程序的實際參數只能是一個變數,而不能是常量或表達式。

          DEFAULT 關鍵字為可選項,用來設定參數的默認值。

          在存儲過程中,變數接收主程序傳遞的值,同時可以參加賦值運算,也可以對其進行賦值。在存儲過程中必須給變數至少賦值一次。

補充:如果省略IN、OUT或IN OUT,則默認模式是IN。 

          調用它時參數個數與位置可以不一致,用以下形式調用:

EXECUTE CHANGE_SALARY(P_RAISE=>80,P_EMPNO=>7788);  //=>運算符左側是參數名,右側是參數表達式

 二:函數

創建函數,需要有CREATE PROCEDURE或CREATE ANY PROCEDURE的系統許可權

刪除函數,需要是函數的創建者或者是擁有DROP ANY PROCEDURE系統許可權的人

修改函數,需要是函數的創建者或者擁有ALTER ANY PROCEDURE系統許可權的人

執行函數,需要是函數的創建者或擁有EXECUTE ANY PROCEDURE系統許可權的人

1:語法

1)創建:

CREATE[ORREPLACE]FUNCTION函數名[(參數[IN] 數據類型...)]

RETURN數據類型

{AS|IS}

[說明部分]

BEGIN

可執行部分

RETURN(表達式)

[EXCEPTION

    錯誤處理部分]

END[函數名];

 說明:

     參數是可選的,但只能是IN類型(IN關鍵字可以省略)。

     在定義部分的RETURN 數據類型,用來表示函數的數據類型,也就是返回值的類型,不可省略。

     在可執行部分的RETURN(表達式),用來生成函數的返回值,其表達式的類型應該和定義部分說明的函數返回值的數據類型一致。在函數的執行部分可以有多個RETURN語句,但只有一個RETURN語句會被執行,一旦執行了RETURN語句,則函數結束並返回調用環境。 

2)刪除

      DROP FUNCTION 函數名;

3)修改

      ALTER PROCEDURE 函數名 COMPILE;

4)執行

      變數名:=函數名(...) 

三:對存儲過程 和 函數的查看(可以通過對數據字典【USER_SOURCE】的訪問來查詢存儲過程或函數的有關信息)

 1:查詢某個存儲過程序內容

select TEXT from user_source WHERE NAME='存儲過程名';

 2:查看數據字殿

DESCRIBE USER_SOURCE ; //命令行中

 3:查看存儲過程的參數

DESCRIBE say_hello; //後面是過程名

 4:查看發生編輯錯誤

SHOW ERRORS ;

 5:查詢一個存儲過程或函數是否是有效狀態(即編譯成功)

SELECT STATUS FROM USER_OBJECTS WHERE OBJECT_NAME='過程名';//注意大小寫

VALID表示該存儲過程有效(即通過編譯),INVALID表示存儲過程無效或需要重新編譯。它的狀態會改變,這與它依賴外部表(表刪除修改等操作)有關系

6:查看存儲過程與表的依賴關系

SELECT REFERENCED_NAME,REFERENCED_TYPE FROM USER_DEPENDENCIES WHERE NAME='SAY_HELLO';

 說明

NAME為實體名,TYPE為實體類型,REFERENCED_OWNER為涉及到的實體擁有者賬戶,REFERENCED_NAME為涉及到的實體名,REFERENCED_TYPE 為涉及到的實體類型。

問題:

如果一個用戶A被授予執行屬於用戶B的一個存儲過程的許可權,在用戶B的存儲過程中,訪問到用戶C的表,用戶B被授予訪問用戶C的表的許可權,但用戶A沒有被授予訪問用戶C表的許可權,那麼用戶A調用用戶B的存儲過程是失敗的還是成功的呢?答案是成功的。

❽ oracle 存儲過程輸出參數咋樣放在一個變數裡面。 getspacename是一個存儲過程,只有一個輸出參數,

請參考以下代碼:
create or replace procere getspacename
(out_value out varchar2)
as
begin
--添加你的代碼....
out_value:= 給該變數賦值;
end;

調用該存儲過程:
SQL> var c varchar2(10);
SQL> exec getspacename(:c)

希望對你有所幫助!

❾ oracle存儲過程中怎麼輸出變數的值

--代碼示例與講解(SQLServer下代碼也是類似)
DECLARE@LSINT--定義一個變數@LS
SET@LS=8--讓@LS等於8
SELECT@LSAStLS--選擇變數@LS作為tLS(即輸出)列出

熱點內容
蘋果和安卓哪個看小說方便 發布:2025-07-13 00:20:25 瀏覽:755
網址訪問量查詢 發布:2025-07-13 00:13:25 瀏覽:976
thinkphp關掉緩存 發布:2025-07-12 23:44:01 瀏覽:86
互動平台源碼 發布:2025-07-12 23:42:15 瀏覽:9
矩形密碼是什麼 發布:2025-07-12 23:41:15 瀏覽:407
kvm存儲技術包括 發布:2025-07-12 23:41:15 瀏覽:950
安卓手機網路怎麼設置才好 發布:2025-07-12 23:33:01 瀏覽:272
怎麼修改手機號服務密碼 發布:2025-07-12 23:29:37 瀏覽:158
myeclipsejsp資料庫連接 發布:2025-07-12 23:26:25 瀏覽:553
凱迪拉克ct6電磁懸掛是哪個配置 發布:2025-07-12 23:24:38 瀏覽:597