当前位置:首页 » 存储配置 » 执行存储检索

执行存储检索

发布时间: 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),并在程式中带来循环行为、条件性执行(透过条件跳转)和函式。许多指令会改变标志暂存器的状态位元。这些标志可用来影响程式行为,缘由于它们时常显出各种运算结果。例如,以一个“比较”指令判断两个值大小,根据比较结果在标志暂存器上设置一个数值。这个标志可借由随后跳转指令来决定程式动向。在执行指令并写回结果之后,程序计数器值会递增,反复整个过程,下一个指令周期正常的提取下一个顺序指令。

热点内容
分解质因数c语言 发布:2024-10-05 12:15:53 浏览:776
mysql存储过程字符编码 发布:2024-10-05 12:05:48 浏览:180
c语言命名 发布:2024-10-05 11:56:38 浏览:616
编程哪个好学习 发布:2024-10-05 11:50:59 浏览:999
为什么不买安卓旗舰 发布:2024-10-05 11:46:04 浏览:380
ostcb编译条件 发布:2024-10-05 11:28:24 浏览:993
win10怎么关闭登录密码 发布:2024-10-05 11:09:55 浏览:935
降温解压器 发布:2024-10-05 10:54:15 浏览:421
轧钢压缩空气 发布:2024-10-05 10:54:10 浏览:185
京东微信密码是多少 发布:2024-10-05 10:28:48 浏览:488