當前位置:首頁 » 存儲配置 » 怎麼調用程序包里的存儲過程

怎麼調用程序包里的存儲過程

發布時間: 2022-07-29 10:01:22

sql存儲過程如何調用存儲過程

1、首先先創建一個存儲過程,代碼如圖,存儲過程主要的功能是為表JingYan插入新的數據。

㈡ oracle SQL語句中怎麼樣調用存儲過程

PL/SQL是ORACLE對標准資料庫語言的擴展,ORACLE公司已經將PL/SQL整合到ORACLE 伺服器和其他工具中了,近幾年中更多的開發人員和DBA開始使用PL/SQL,本文將講述PL/SQL基礎語法,結構和組件、以及如何設計並執行一個PL/SQL程序。

PL/SQL的優點

從版本6開始PL/SQL就被可靠的整合到ORACLE中了,一旦掌握PL/SQL的優點以及其獨有的數據管理的便利性,那麼你很難想像ORACLE缺了PL/SQL的情形。PL/SQL 不是一個獨立的產品,他是一個整合到ORACLE伺服器和ORACLE工具中的技術,可以把PL/SQL看作ORACLE伺服器內的一個引擎,sql語句執行者處理單個的sql語句,PL/SQL引擎處理PL/SQL程序塊。當PL/SQL程序塊在PL/SQL引擎處理時,ORACLE伺服器中的SQL語句執行器處理pl/sql程序塊中的SQL語句。

PL/SQL的優點如下:

. PL/SQL是一種高性能的基於事務處理的語言,能運行在任何ORACLE環境中,支持所有數據處理命令。通過使用PL/SQL程序單元處理SQL的數據定義和數據控制元素。

. PL/SQL支持所有SQL數據類型和所有SQL函數,同時支持所有ORACLE對象類型

. PL/SQL塊可以被命名和存儲在ORACLE伺服器中,同時也能被其他的PL/SQL程序或SQL命令調用,任何客戶/伺服器工具都能訪問PL/SQL程序,具有很好的可重用性。

. 可以使用ORACLE數據工具管理存儲在伺服器中的PL/SQL程序的安全性。可以授權或撤銷資料庫其他用戶訪問PL/SQL程序的能力。

. PL/SQL代碼可以使用任何ASCII文本編輯器編寫,所以對任何ORACLE能夠運行的操作系統都是非常便利的

. 對於SQL,ORACLE必須在同一時間處理每一條SQL語句,在網路環境下這就意味作每一個獨立的調用都必須被oracle伺服器處理,這就佔用大量的伺服器時間,同時導致網路擁擠。而PL/SQL是以整個語句塊發給伺服器,這就降低了網路擁擠。

PL/SQL塊結構

PL/SQL是一種塊結構的語言,組成PL/SQL程序的單元是邏輯塊,一個PL/SQL 程序包含了一個或多個邏輯塊,每個塊都可以劃分為三個部分。與其他語言相同,變數在使用之前必須聲明,PL/SQL提供了獨立的專門用於處理異常的部分,下面描述了PL/SQL塊的不同部分:

聲明部分(Declaration section)

聲明部分包含了變數和常量的數據類型和初始值。這個部分是由關鍵字DECLARE開始,如果不需要聲明變數或常量,那麼可以忽略這一部分;需要說明的是游標的聲明也在這一部分。

執行部分(Executable section)

執行部分是PL/SQL塊中的指令部分,由關鍵字BEGIN開始,所有的可執行語句都放在這一部分,其他的PL/SQL塊也可以放在這一部分。

異常處理部分(Exception section)

這一部分是可選的,在這一部分中處理異常或錯誤,對異常處理的詳細討論我們在後面進行。

PL/SQL塊語法

[DECLARE]
---declaration statements
BEGIN
---executable statements
[EXCEPTION]
---exception statements
END

PL/SQL塊中的每一條語句都必須以分號結束,SQL語句可以使多行的,但分號表示該語句的結束。一行中可以有多條SQL語句,他們之間以分號分隔。每一個PL/SQL塊由BEGIN或DECLARE開始,以END結束。注釋由--標示。

PL/SQL塊的命名和匿名

PL/SQL程序塊可以是一個命名的程序塊也可以是一個匿名程序塊。匿名程序塊可以用在伺服器端也可以用在客戶端。

命名程序塊可以出現在其他PL/SQL程序塊的聲明部分,這方面比較明顯的是子程序,子程序可以在執行部分引用,也可以在異常處理部分引用。

PL/SQL程序塊可背獨立編譯並存儲在資料庫中,任何與資料庫相連接的應用程序都可以訪問這些存儲的PL/SQL程序塊。ORACLE提供了四種類型的可存儲的程序:

. 函數

. 過程

. 包

. 觸發器

函數

函數是命名了的、存儲在資料庫中的PL/SQL程序塊。函數接受零個或多個輸入參數,有一個返回值,返回值的數據類型在創建函數時定義。定義函數的語法如下:

FUNCTION name [{parameter[,parameter,...])] RETURN datatypes IS
[local declarations]
BEGIN
execute statements
[EXCEPTION
exception handlers]
END [name]

過程

存儲過程是一個PL/SQL程序塊,接受零個或多個參數作為輸入(INPUT)或輸出(OUTPUT)、或既作輸入又作輸出(INOUT),與函數不同,存儲過程沒有返回值,存儲過程不能由SQL語句直接使用,只能通過EXECUT命令或PL/SQL程序塊內部調用,定義存儲過程的語法如下:

PROCEDURE name [(parameter[,parameter,...])] IS
[local declarations]
BEGIN
execute statements
[EXCEPTION
exception handlers ]
END [name]


包(package)

包其實就是被組合在一起的相關對象的集合,當包中任何函數或存儲過程被調用,包就被載入入內存中,包中的任何函數或存儲過程的子程序訪問速度將大大加快。
包由兩個部分組成:規范和包主體(body),規范描述變數、常量、游標、和子程序,包體完全定義子程序和游標。

觸發器(trigger)

觸發器與一個表或資料庫事件聯系在一起的,當一個觸發器事件發生時,定義在表上的觸發器被觸發。

變數和常量

變數存放在內存中以獲得值,能被PL/SQL塊引用。你可以把變數想像成一個可儲藏東西的容器,容器內的東西是可以改變的。

聲明變數

變數一般都在PL/SQL塊的聲明部分聲明,PL/SQL是一種強壯的類型語言,這就是說在引用變數前必須首先聲明,要在執行或異常處理部分使用變數,那麼變數必須首先在聲明部分進行聲明。

聲明變數的語法如下:

Variable_name [CONSTANT] databyte [NOT NULL][:=|DEFAULT expression]

注意:可以在聲明變數的同時給變數強制性的加上NOT NULL約束條件,此時變數在初始化時必須賦值。

給變數賦值

給變數賦值有兩種方式:

. 直接給變數賦值

X:=200;
Y=Y+(X*20);

. 通過SQL SELECT INTO 或FETCH INTO給變數賦值

SELECT SUM(SALARY),SUM(SALARY*0.1)
INTO TOTAL_SALARY,TATAL_COMMISSION
FROM EMPLOYEE
WHERE DEPT=10;

常量

常量與變數相似,但常量的值在程序內部不能改變,常量的值在定義時賦予,,他的聲明方式與變數相似,但必須包括關鍵字CONSTANT。常量和變數都可被定義為SQL和用戶定義的數據類型。

ZERO_VALUE CONSTANT NUMBER:=0;

這個語句定了一個名叫ZERO_VALUE、數據類型是NUMBER、值為0的常量。

標量(scalar)數據類型

標量(scalar)數據類型沒有內部組件,他們大致可分為以下四類:

. number
. character
. date/time
. boolean

㈢ 存儲過程怎麼調用

存儲過程如果是包內調用,直接用存儲過程名字後面加括弧帶上參數即可。如果是包外調用,需要用【包的名字】.【存儲過程名字】(…)這樣的格式。

㈣ oracle中怎麼在存儲過程中調用同一個包的其他存儲過程

在存儲過程或函數里調用oracle包的話,首先要有執行這個包的許可權;如果包屬於其他的用戶(不是系統包),調用時:用戶名.包名.存儲過程(參數)名或者
變數:=用戶名.包名.函數(參數);因為函數有返回值,變數類型要跟函數返回值的類型一致。
在command
下調用的話:exec
用戶名.包名.存儲過程名(參數);select
用戶名.包名.函數名(參數)
from
al;就可以了。包屬於當期用戶可以不寫用戶名。

php調用oracle存儲過程與函數

對於存儲過程的源代碼,開始都需要先定義接受的參數,例如:

PROCEDURE edit_entry(

status_out OUT NUMBER,

status_msg_out OUT VARCHAR2,

id_inout IN OUT INTEGER,

title_in IN VARCHAR2,

text_out OUT CLOB,

categories_in IN list_of_numbers

);

從 PHP 中調用存儲過程 對於要從 PHP 中執行以調用過程的 SQL 語句而言,您將通常在 Oracle BEGIN ...END; 塊(稱作匿名塊)中嵌入調用。例如:

<?php

// etc.

//$sql = 'BEGIN sayHello(:name, :message); END;';

//然後,通過調用 oci_bind_by_name() 將參數綁定到 PHP 變數。 如果使用以下 DDL 語句定義了 sayHello

//:

//CREATE OR REPLACE PROCEDURE

//sayHello (name IN VARCHAR2, greeting OUT VARCHAR2)

//AS

//BEGIN

//greeting := 'Hello ' || name;

//END;

//

//注意,您可以使用 SQL*Plus 命令行運行上面的語句。將該語句保存到文件 (SAYHELLO.SQL)。接下來,使用

//SQL*Plus 登錄:

//$ sqlplus username@SID

//然後,使用 START 命令創建該過程:

//SQL> START /home/username/SAYHELLO.SQL

//以下 PHP 腳本調用該過程:$conn = oci_connect('SCOTT','TIGER') or die;

$sql = 'BEGIN sayHello(:name, :message); END;';

$stmt = oci_parse($conn,$sql);

// Bind the input parameter

oci_bind_by_name($stmt,':name',$name,32);

// Bind the output parameter

oci_bind_by_name($stmt,':message',$message,32);

// Assign a value to the input

$name = 'Harry';

oci_execute($stmt);

// $message is now populated with the output value

print "$message\n";

?>

調用程序包中的過程時,將使用句號來分隔程序包名稱與過程名稱。 可以使用以下語句指定 blog 程序包:

CREATE OR REPLACE PACKAGE blog AS

TYPE cursorType IS REF CURSOR RETURN blogs%ROWTYPE;

/*

Fetch the latest num_entries_in from the blogs table, populating

entries_cursor_out with the result

*/

PROCEDURE latest(

num_entries_in IN NUMBER,

entries_cursor_out OUT cursorType

);

/*

Edit a blog entry.If id_inout is NULL, results in an INSERT, otherwise

attempts to UPDATE the existing blog entry. status_out will have the value

1 on success, otherwise a negative number on failure with status_msg_out

containing a description

categories_in is a collection where list_of_numbers is described by

TYPE list_of_numbers AS VARRAY(50) OF NUMBER;

*/

PROCEDURE edit_entry(

status_out OUT NUMBER,

status_msg_out OUT VARCHAR2,

id_inout IN OUT INTEGER,

title_in IN VARCHAR2,

text_out OUT CLOB,

categories_in IN list_of_numbers

);

END blog;

/

㈥ 怎麼調用一存儲過程

EXECSP_INSERT_MOCTE_PL@GDDB,@GDDH,'5601','2013060005','000612','9001'

你不會調用帶參數的存儲過程嗎

㈦ 如何調試存儲過程和package

1.打開PL/SQL Developer
如果在機器上安裝了PL/SQL Developer的話,打開PL/SQL Developer界面
輸入用戶名,密碼和host名字,這個跟在程序中web.config中配置的完全相同,點擊確定
找到需要調試的存儲過程所在的包(Package bodies),如PACK_ACTIVITY,點擊右鍵,在彈出菜單中選擇[查看],得到包中的所有存儲過程和他們的代碼.
2.添加debug信息
為了能夠單步跟蹤存儲過程,需要為其所在的包添加debug信息,右鍵點擊需要調試的包,在彈出菜單中選中[添加調試信息].
這樣就為包體添加了調試信息。
3.調試存儲過程
現在所有的准備工作都做好了,可以調試跟蹤存儲過程了。
選擇需要調試的存儲過程,點擊右鍵,在彈出菜單中選擇[測試],進去測試窗口. 測試窗口中有為了測試該存儲過程自動所產生的代碼,當然你也可以自己另外加入和修改代碼,對於我們目前只是為了調試存儲過程,自動生成的代碼已經足夠了。接著按照如下的步驟進行調試。
(1)添加存儲過程所需要的參數,我們項目中的大多數存儲過程都是需要參數的,參數可以在測試窗口右下部分輸入。
如:GetPanNO_New需要一個輸入參數v_employeeid,我們輸入180,輸出參數是mycursor,是查看結果的,不需要輸入任何值。
(2)開始調試,點擊[調試]菜單-[開始](或者按F9),就進去調試模式了,程序開始停在begin這一行.
(3)以後的調試過程跟我們熟悉的的調試過程就一樣了:
運行(Ctrl+R)
單步進入(Ctrl+N)
單步跳過(Ctrl+O)
單步退出(Ctrl+T)
或者點擊debug工具條上的按扭: 當按Ctrl+N進去存儲過程的源代碼中後
在這個窗口中可以查看過程中的變數值和堆棧。
(4)調試運行完了後,可以查看結果如下(點擊mycursor變數旁邊的按鈕).

㈧ 如何調用存儲過程

過程:沒有返回值,select 不可能調用
調用過程有專門的語法:call 過程名([實參列表])

熱點內容
光遇安卓音韻季有什麼 發布:2024-10-06 05:06:51 瀏覽:76
apk腳本破解 發布:2024-10-06 04:33:23 瀏覽:51
數模編程 發布:2024-10-06 04:04:43 瀏覽:16
雷霆一擊伺服器搭建 發布:2024-10-06 03:58:14 瀏覽:500
導演腳本 發布:2024-10-06 03:37:34 瀏覽:566
施耐德有密碼程序如何打開 發布:2024-10-06 03:37:00 瀏覽:893
解壓縮文件修復 發布:2024-10-06 03:31:17 瀏覽:705
如何設置休眠時不需要開機密碼 發布:2024-10-06 03:03:25 瀏覽:233
密碼工作三個事關的內容是什麼 發布:2024-10-06 02:39:44 瀏覽:427
21款昂科威哪個配置好 發布:2024-10-06 02:20:39 瀏覽:839