當前位置:首頁 » 存儲配置 » 執行存儲檢索

執行存儲檢索

發布時間: 2022-08-03 23:35:04

❶ 如何動態執行存儲過程或函數

您好,很高興為您解答。

/*動態執行存儲過程DEMO*/
DECLARE
v_Procere_Name VARCHAR2(320); --存儲過程名
v_Input_Parameter1 VARCHAR2(320); --傳入參數1
v_Input_Parameter2 VARCHAR2(320); --傳入參數2
v_Return_Int INTEGER; --接收返回值
v_Return_String VARCHAR2(320); --接收返回值

v_sql_Str VARCHAR2(320); --動態執行SQL語句
BEGIN
/*獲取存儲過程名,可以從資料庫中動態讀取需要執行的存儲過程,本DEMO直接賦值*/
v_Procere_Name := 'Wms_Application_Out_p.Application_Out_List_Refuse(:i_Str1,:i_Str2,_Return_Int,_Return_String)';
/*本DEMO假定需要調用的存儲過程有兩個傳入參數和兩個傳出參數*/
v_Input_Parameter1 := 'test01'; --傳入參數1,在實際應用中根據具體情況機型賦值
v_Input_Parameter2 := 'test01'; --傳入參數2,在實際應用中根據具體情況機型賦值
/*動態生成需要執行存儲過程的SQL語句*/
v_Sql_Str := 'BEGIN ' || v_Procere_Name || '; END;';
/*執行該SQL語句*/
EXECUTE IMMEDIATE v_Sql_Str
USING IN v_Input_Parameter1, IN v_Input_Parameter2, OUT v_Return_Int, OUT v_Return_String; --參數類型和傳遞順序必須與存儲過程中的保持一致
/*輸出返回值*/
Dbms_Output.Put_Line(v_Return_Int || v_Return_String);
END;

/*動態執行函數DEMO*/
DECLARE
v_Function_Name VARCHAR2(320); --函數名
v_Input_Parameter1 VARCHAR2(320); --傳入參數1
v_Return_String VARCHAR2(320); --接收返回值

v_Sql_Str VARCHAR2(320); --動態執行SQL語句
BEGIN
/*獲取函數名,可以從資料庫中動態讀取需要執行的函數,本DEMO直接賦值*/
v_Function_Name := 'Return_Str_f(:i_Str1)';
/*本DEMO假定需要調用的函數有1個傳入參數*/
v_Input_Parameter1 := 'test01'; --傳入參數1,在實際應用中根據具體情況機型賦值
/*動態生成需要執行函數的SQL語句*/
v_Sql_Str := 'begin :v_Return_String := ' || v_Function_Name || '; end;';
/*執行該SQL語句*/
EXECUTE IMMEDIATE v_Sql_Str
USING OUT v_Return_String, IN v_Input_Parameter1; --接收返回值必須在前,傳入參數類型和傳遞順序必須與函數中保持一致
/*輸出返回值*/
Dbms_Output.Put_Line(v_Return_String);
END;

/*所調用函數*/
CREATE OR REPLACE FUNCTION Return_Str_f(i_Str1 VARCHAR2) RETURN VARCHAR2 IS
v_Sql_Str VARCHAR2(320);
v_Str1 VARCHAR2(320);
BEGIN
/*生成動態執行SQL*/
v_Sql_Str := 'SELECT ''' || i_Str1 || ''' FROM DUAL';
EXECUTE IMMEDIATE v_Sql_Str
INTO v_Str1; --接收返回值
/*輸出返回結果*/
Dbms_Output.Put_Line('v_str1=' || v_Str1);
RETURN v_Str1;
END;

相關資料:
Oracle PL/SQL中動態執行SQL EXECUTE IMMEDIATE

在plsql中經常遇到sql語句是在過程中動態生成的,這個時候可以用EXECUTE IMMEDIATE來執行生成的sql語句。轉一個javaeye(貌似他也是轉的,找不到出處)上的EXECUTE IMMEDIATE用法。
EXECUTE IMMEDIATE代替了以前Oracle8i中DBMS_SQL package包.它解析並馬上執行動態的SQL語句或非運行時創建的PL/SQL塊.動態創建和執行SQL語句性能超前,EXECUTE IMMEDIATE的目標在於減小企業費用並獲得較高的性能,較之以前它相當輕易編碼.盡管DBMS_SQL仍然可用,

但是推薦使用EXECUTE IMMEDIATE,因為它獲的收益在包之上。
使用技巧
1. EXECUTE IMMEDIATE將不會提交一個DML事務執行,應該顯式提交
假如通過EXECUTE IMMEDIATE處理DML命令,那麼在完成以前需要顯式提交或者作為EXECUTE IMMEDIATE自己的一部分. 假如通過EXECUTE IMMEDIATE處理DDL命令,它提交所有以前改變的數據
2. 不支持返回多行的查詢,這種交互將用臨時表來存儲記錄(參照例子如下)或者用REF cursors.
3. 當執行SQL語句時,不要用分號,當執行PL/SQL塊時,在其尾部用分號.
4. 在Oracle手冊中,未具體覆蓋這些功能。下面的例子展示了所有用到Execute immediate的可能方面.希望能給你帶來方便.
5. 對於Forms開發者,當在PL/SQL 8.0.6.3.版本中,Forms 6i不能使用此功能.
EXECUTE IMMEDIATE用法例子
1. 在PL/SQL運行DDL語句
begin
execute immediate 'set role all';
end;
2. 給動態語句傳值(USING 子句)
declare
l_depnam varchar2(20) := 'testing';
l_locvarchar2(10) := 'Du';
begin
execute immediate 'insert into dept values(:1, :2, :3)'
using 50, l_depnam, l_loc;
commit;
end;
3. 從動態語句檢索值(INTO子句)
declare
l_cntvarchar2(20);
begin
execute immediate 'select count(1) from emp'
into l_cnt;
dbms_output.put_line(l_cnt);
end;
4. 動態調用常式.常式中用到的綁定變數參數必須指定參數類型.黓認為IN類型,其它類型必須顯式指定
declare
l_routin varchar2(100) := 'gen2161.get_rowcnt';
l_tblnam varchar2(20) := 'emp';
l_cntnumber;
l_status varchar2(200);
begin
execute immediate 'begin ' l_routin '(:2, :3, :4); end;'
using in l_tblnam, out l_cnt, in out l_status;
if l_status != 'OK' then
dbms_output.put_line('error');
end if;
end;
5. 將返回值傳遞到PL/SQL記錄類型;同樣也可用%rowtype變數
declare
type empdtlrec is record (empnonumber(4),
enamevarchar2(20),
deptnonumber(2));
empdtl empdtlrec;
begin
execute immediate 'select empno, ename, deptno '
'from emp where empno = 7934'
into empdtl;
end;
6. 傳遞並檢索值.INTO子句用在USING子句前
declare
l_deptpls_integer := 20;
l_nam varchar2(20);
l_loc varchar2(20);
begin
execute immediate 'select dname, loc from dept where deptno = :1'
into l_nam, l_loc
using l_dept ;
end;
7. 多行查詢選項.對此選項用insert語句填充臨時表,用臨時表進行進一步的處理,也可以用REF cursors糾正此缺憾.
declare
l_sal pls_integer := 2000;
begin
execute immediate 'insert into temp(empno, ename) '
'select empno, ename from emp '
'wheresal :1'
using l_sal;
commit;
end;
對於處理動態語句,EXECUTE IMMEDIATE比以前可能用到的更輕易並且更高效.當意圖執行動態語句時,適當地處理異常更加重要.應該關注於捕捉所有可能的異常.

如若滿意,請點擊右側【採納答案】,如若還有問題,請點擊【追問】

希望我的回答對您有所幫助,望採納!

~ O(∩_∩)O~

❷ 怎麼在mysql中查詢已建立的存儲過程

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

❸ 如何:使用存儲過程執行查詢(實體框架)

許多應用程序開發人員和資料庫管理員都使用存儲過程來增強安全性、提供可預測性以及對資料庫內的數據封裝邏輯。檢索映射到存儲過程的數據的應用程序代碼使用由 FunctionImport 元素標識的函數。如何:使用存儲過程定義模型(實體框架) 中介紹了將存儲過程映射到實體數據模型 (EDM) 實現所需的架構語法的基本元素。EDM 支持兩種存儲過程映射。有關映射用於更新數據的存儲過程的更多信息,請參見存儲過程支持(實體框架)。本主題中的示例基於 Adventure Works 銷售模型。若要運行本示例中的代碼,必須已將 AdventureWorks 銷售模型添加到您的項目中,並將項目配置為使用實體框架。為此,請完成如何:手動配置實體框架項目和如何:手動定義實體數據模型(實體框架) 中的過程。此架構中定義了五個實體:以下步驟實現一個客戶端應用程序,以及一段執行存儲過程的代碼,該存儲過程映射到數據模型的概念架構中的 GetOrderDetailsFunctionImport。該函數檢索與給定 SalesOrderHeader 相關的 SalesOrderDetail 實體。(此模型中的 FK_SalesOrderDetail_SalesOrderHeader_SalesOrderID 關聯可以實現與此示例相同的功能。)在資料庫中創建存儲過程創建控制台應用程序。添加對主題如何:使用存儲過程定義模型(實體框架)中實現的 dll 的引用。添加對 System.Data.Entity 和System.Runtime.Serialization 的引用。為在如何:使用存儲過程定義模型(實體框架)中實現的 AdventureWorksModel 添加預處理器指令。示例存儲過程中使用了 SalesOrderHeaderId 所需的參數。在對象瀏覽器中可以找到該語法(AdventureWorksEntities 命名空間中的方法:GetOrderDetails(int)。)下面的代碼運行存儲過程來返回結果,這些結果隨後在 foreach 循環中枚舉。C#VBOptionExplicitOnOption Strict OnImports System Imports System.Collections.Generic Imports System.Linq Imports System.Text Imports AdvWrksSalesModel Mole Mole1 Sub Main() TryUsing db As AdvWksSalesEntities = New AdvWksSalesEntities() Dim soHeaderNumber AsInteger = 43659 ForEachorderAs SalesOrderDetail _ In db.GetOrderDetails(soHeaderNumber) Console.WriteLine("Header#: {0} " & _ "Order#: {1} ProctID: {2} Quantity: {3} Price: {4}", _ soHeaderNumber, order.SalesOrderDetailID, order.ProctID, _ order.OrderQty, order.UnitPrice) NextEndUsingCatch ex As System.Data.MappingException Console.WriteLine(ex.ToString()) Catch ex As System.Data.CommandExecutionException Console.WriteLine(ex.ToString()) EndTryEndSubEndMole輸出結果將如下所示: Header#: 43659 Order#: 1 ProctID: 776 Quantity: 1 Price: 2024.9940 Header#: 43659 Order#: 2 ProctID: 777 Quantity: 3 Price: 2024.9940 Header#: 43659 Order#: 3 ProctID: 778 Quantity: 1 Price: 2024.9940 Header#: 43659 Order#: 4 ProctID: 771 Quantity: 1 Price: 2039.9940 Header#: 43659 Order#: 5 ProctID: 772 Quantity: 1 Price: 2039.9940 Header#: 43659 Order#: 6 ProctID: 773 Quantity: 2 Price: 2039.9940 Header#: 43659 Order#: 7 ProctID: 774 Quantity: 1 Price: 2039.9940 Header#: 43659 Order#: 8 ProctID: 714 Quantity: 3 Price: 28.8404 Header#: 43659 Order#: 9 ProctID: 716 Quantity: 1 Price: 28.8404 Header#: 43659 Order#: 10 ProctID: 709 Quantity: 6 Price: 5.7000 Header#: 43659 Order#: 11 ProctID: 712 Quantity: 2 Price: 5.1865 Header#: 43659 Order#: 12 ProctID: 711 Quantity: 4 Price: 20.1865 另請參見任務如何:使用存儲過程定義模型(實體框架)概念AdventureWorks 銷售模型 (EDM)存儲過程支持(實體框架)ModificationFunctionMapping (EntityTypeMapping)ModificationFunctionMapping (AssociationSetMapping)

❹ cpu執行指令需要從存儲器讀取數據時數據搜索的順序是么

它是按堆棧的順序順序執行的,至於棧中的順序是按優先順序排 cache叫做高速緩沖存儲器,是集成在CPU中的,存取速度最快,其次是內存,也就是主板上插的那個條條,速度最慢的是外存,也就是硬碟

❺ 查詢中國的國土面積有多大執行什麼檢索

關鍵詞檢索、引文檢索都可以。

狹義的信息檢索僅指信息查詢。即用戶根據需要,採用一定的方法,藉助檢索工具,從信息集合中找出所需要信息的查找過程。

廣義的信息檢索是信息按一定的方式進行加工、整理、組織並存儲起來,再根據信息用戶特定的需要將相關信息准確的查找出來的過程。又稱信息的存儲與檢索。一般情況下,信息檢索指的就是廣義的信息檢索。

信息檢索有廣義和狹義的之分。廣義的信息檢索全稱為「信息存儲與檢索」,是指將信息按一定的方式組織和存儲起來,並根據用戶的需要找出有關信息的過程。狹義的信息檢索為「信息存儲與檢索」的後半部分。

通常稱為「信息查找」或「信息搜索」,是指從信息集合中找出用戶所需要的有關信息的過程。狹義的信息檢索包括3個方面的含義:了解用戶的信息需求、信息檢索的技術或方法、滿足信息用戶的需求。

❻ sql如何批量進行執行存儲過程並傳參數

把SQL語句寫成存儲過程,這樣以後每次只需要調用存儲過程就行了

❼ cup所有的計算、存儲、處理數據操作都由什麼執行

CPU從存儲器或高速緩沖存儲器中取出指令,放入指令寄存器,並對指令解碼。這是一個非常復雜的過程。它把指令分解成一系列的微操作,然後發出各種控制命令,執行微操作系列,從而完成一條指令的執行。指令是計算機規定執行操作的類型和操作數的基本命令。指令是由一個位元組或者多個位元組組成,其中包括操作碼欄位、一個或多個有關操作數地址的欄位以及一些表徵機器狀態的狀態字以及特徵碼。有的指令中也直接包含操作數本身。


提取


第一階段,提取,從存儲器或高速緩沖存儲器中檢索指令(為數值或一系列數值)。由程序計數器(program counter)指定存儲器的位置。(程序計數器保存供識別程序位置的數值。換言之,程序計數器記錄了cpu在程序里的蹤跡。)


解碼


cpu根據存儲器提取到的指令來決定其執行行為。在解碼階段,指令被拆解為有意義的片段。根據cpu的指令集架構(isa)定義將數值解譯為指令。一部分的指令數值為運算碼(opcode),其指示要進行哪些運算。其它的數值通常供給指令必要的信息,諸如一個加法(addition)運算的運算目標。


執行


在提取和解碼階段之後,緊接著進入執行階段。該階段中,連接到各種能夠進行所需運算的cpu部件。


例如,要求一個加法運算,算術邏輯單元(alu,arithmetic logic
unit)將會連接到一組輸入和一組輸出。輸入提供了要相加的數值,而輸出將含有總和的結果。alu內含電路系統,易於輸出端完成簡單的普通運算和邏輯運算(比如加法和位元運算)。如果加法運算產生一個對該cpu處理而言過大的結果,在標志暫存器里可能會設置運算溢出(arithmetic
overflow)標志。


寫回


最終階段,寫回,以一定格式將執行階段的結果簡單的寫回。運算結果經常被寫進cpu內部的暫存器,以供隨後指令快速存取。在其它案例中,運算結果可能寫進速度較慢,但容量較大且較便宜的主記憶體中。某些類型的指令會操作程序計數器,而不直接產生結果。這些一般稱作「跳轉」(jumps),並在程式中帶來循環行為、條件性執行(透過條件跳轉)和函式。許多指令會改變標志暫存器的狀態位元。這些標志可用來影響程式行為,緣由於它們時常顯出各種運算結果。例如,以一個「比較」指令判斷兩個值大小,根據比較結果在標志暫存器上設置一個數值。這個標志可藉由隨後跳轉指令來決定程式動向。在執行指令並寫回結果之後,程序計數器值會遞增,反覆整個過程,下一個指令周期正常的提取下一個順序指令。

熱點內容
粘連演算法 發布:2024-10-05 10:10:45 瀏覽:646
php監控進程 發布:2024-10-05 09:37:06 瀏覽:49
企業密信怎麼找回伺服器代碼 發布:2024-10-05 09:33:19 瀏覽:228
怎麼用電腦開mc伺服器 發布:2024-10-05 09:25:01 瀏覽:408
linux目錄亂碼 發布:2024-10-05 09:24:24 瀏覽:171
歐姆龍plc有密碼如何傳送 發布:2024-10-05 09:24:24 瀏覽:336
安卓11如何隱藏圖標 發布:2024-10-05 09:11:32 瀏覽:702
唐山壹編程 發布:2024-10-05 08:48:07 瀏覽:813
廣東gps時鍾伺服器雲主機 發布:2024-10-05 08:27:31 瀏覽:756
超級訪問沙溢 發布:2024-10-05 08:26:13 瀏覽:228