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

存儲過程oracle變數賦值

發布時間: 2023-02-09 15:44:48

1. 大家幫忙看看Oracle存儲過程怎樣給變數賦值

在pl/sql developer中,選中你要執行的存儲過程,點擊右鍵選擇「測試」,在下面的參數中輸入你的「123456789」,點擊工具欄的「執行」,執行完畢後,如果有返回值就點擊cursor,可以看到結果了。

2. Oracle 如何給存儲過程賦值

如果存儲過程的名字是issuccess
可以這樣定義入參 issuccess(PRM_I in varchar2).
調用的時候就可以:
issuccess('123456789');
作為傳入的值來處理。
如果需要把存儲過程中處理的結果返回出來,那麼可以定以OUT 參數:
issuccess(PRM_I in varchar2,PRM_O OUT VARCHAR).
調用之前准備一個變數
VS_OUT varchar2(20);
調用時:
issuccess('123456789',VS_OUT).
過程裡面修改PRM_O的值,過程執行完成後可以通過VS_OUT捕獲。

3. 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的存儲過程是失敗的還是成功的呢?答案是成功的。

4. oracle date 在存儲過程中賦值

v_begintime和v_endtime都賦值為sysdate,相減自然為0
至於v_begintime的值變為了21-JAN-15,失去了秒,這是顯示的格式問題。你可以用to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')來查看秒

5. Oracle 如何給存儲過程賦值

如果存儲過程的名字是issuccess
可以這樣定義入參
issuccess(PRM_I
in
varchar2).
調用的時候就可以:
issuccess('123456789');
作為傳入的值來處理。
如果需要把存儲過程中處理的結果返回出來,那麼可以定以OUT
參數:
issuccess(PRM_I
in
varchar2,PRM_O
OUT
VARCHAR).
調用之前准備一個變數
VS_OUT
varchar2(20);
調用時:
issuccess('123456789',VS_OUT).
過程裡面修改PRM_O的值,過程執行完成後可以通過VS_OUT捕獲。

6. datagrips oracle編寫存儲過程

定義方式:
變數名 類型(長度);

普通變數類型的賦值方式有兩種:
1、通過 := 直接賦值;
2、通過 select (表中變數名) into (定義的普通變數) from ... where ... 賦值;
使用方法如下:

定義方式
變數名 表名.列名%type;
使用方法如下:

定義方式
對象名 表名%rowtype
使用方法如下:

定義
用於臨時存儲一個查詢返回的多行數據,通過遍歷的方式可以逐行訪問處理該結果集的數據;
游標屬性

7. oracle存儲過程變數賦值報錯

ORACLE中字元串連接符是雙豎線「||」。
把代碼中的「+」換成「||」,另外,ddl語句不需要commit,去掉commit,代碼如下:
CREATE OR REPLACE PROCEDURE aaa_Zbflagexb(Vdwlx VARCHAR,
Vbzsj VARCHAR) IS
Vsql VARCHAR(8000);
Vtname VARCHAR(100);
Vtnameex VARCHAR(100);
BEGIN
Vtname := 'ZBFlag_' || Vdwlx;
Vtnameex := 'ZBFlagEx_' || Vdwlx;
Vsql := 'create table ' || Vtname ||
' (dwbh varchar(100),dwmc varchar(200),flag number(1),dwlx number) ';
EXECUTE IMMEDIATE Vsql;
--COMMIT;
END;

8. oracle存儲過程中給變數賦值帶有特殊符號

CREATEORREPLACEPROCEDUREttIS
v_sqlVARCHAR2(10000);
BEGIN
v_sql:='createtableaaasselect*frombbwherebb.b1like''123%''';
--EXECUTEIMMEDIATEv_sql;--這句你可以先屏蔽掉
dbms_output.put_line(v_sql);--把v_sql列印出來看看
END;

9. oracle的存儲過程,為什麼不允許直接在變數里賦值

oracle的存儲過程,不允許直接在變數里賦值是因為oracle存儲過程定義時並不會初始化變數的內存大小,只有使用的時候才會去分配。
oracle的存儲過程的基本語法:
一:存儲過程分部解析:
1 CREATE OR REPLACE PROCEDURE 存儲過程名
2 IS
3 BEGIN
4 NULL;
5 END;

行1:
CREATE OR REPLACE PROCEDURE 是一個SQL語句通知Oracle資料庫去創建一個叫做skeleton存儲過程, 如果存在就覆蓋它;
行2:
IS關鍵詞表明後面將跟隨一個PL/SQL體。
行3:
BEGIN關鍵詞表明PL/SQL體的開始。
行4:
NULL PL/SQL語句表明什麼事都不做,這句不能刪去,因為PL/SQL體中至少需要有一句;
行5:
END關鍵詞表明PL/SQL體的結束
二:存儲過程創建語法:
create or replace procere 存儲過程名(param1 in type,param2 out type)
as
變數1 類型(值范圍); --vs_msg VARCHAR2(4000);
變數2 類型(值范圍);
Begin
//這里才可以給變數賦值
Select count(*) into 變數1 from 表A where列名=param1;

If (判斷條件) then
Select 列名 into 變數2 from 表A where列名=param1;
Dbms_output。Put_line(『列印信息』);
Elsif (判斷條件) then
Dbms_output。Put_line(『列印信息』);
Else
Raise 異常名(NO_DATA_FOUND);
End if;
Exception
When others then
Rollback;
End;

熱點內容
如何安排資產配置 發布:2025-07-15 09:33:24 瀏覽:906
更新傳送伺服器目的地址失敗 發布:2025-07-15 09:27:05 瀏覽:484
c語言else的用法 發布:2025-07-15 09:19:54 瀏覽:119
tnt蘋果核安卓怎麼加好友 發布:2025-07-15 09:05:15 瀏覽:239
年輕人運行內存為什麼比安卓好 發布:2025-07-15 08:52:03 瀏覽:515
怎麼配置組策略 發布:2025-07-15 08:52:02 瀏覽:246
pythonjson格式 發布:2025-07-15 08:42:54 瀏覽:678
醫院葯房要什麼配置 發布:2025-07-15 08:29:55 瀏覽:666
編程說明書 發布:2025-07-15 08:16:39 瀏覽:761
android請求超時 發布:2025-07-15 07:56:57 瀏覽:530