oracle 存储过程执行可输入sql语句并返回结果集

1.建立测试表:

create table AAA

(

aa NVARCHAR2(100),

bb NVARCHAR2(100),

cc NVARCHAR2(100),

dd NVARCHAR2(100)

)

并导入测试数据insert into aaa values(‘1‘,‘1‘,‘1‘,‘1‘);

2.测试可行性:

DECLARE

v_cursor NUMBER;

v_stat NUMBER;

aa VARCHAR(100);

bb VARCHAR(100);

cc VARCHAR(100);

dd VARCHAR(100);

v_sql VARCHAR(200);

BEGIN

v_sql :=‘select * from aaa‘;

v_cursor := dbms_sql.open_cursor; --打开游标;

dbms_sql.parse(v_cursor, v_sql, dbms_sql.native); --解析动态SQL语句;

dbms_sql.define_column(v_cursor, 1, aa,100); --定义列

dbms_sql.define_column(v_cursor, 2,bb, 100);

dbms_sql.define_column(v_cursor, 3,cc,100);

dbms_sql.define_column(v_cursor, 4, dd,100);

v_stat := dbms_sql.execute(v_cursor); --执行动态SQL语句。

LOOP

EXIT WHEN dbms_sql.fetch_rows(v_cursor)<=0; --fetch_rows在结果集中移动游标,如果未抵达末尾,返回1。

dbms_sql.column_value(v_cursor, 1,  aa); --将当前行的查询结果写入上面定义的列中。

dbms_sql.column_value(v_cursor, 2, bb);

dbms_sql.column_value(v_cursor, 3,cc);

dbms_sql.column_value(v_cursor, 4, dd);

dbms_output.put_line(aa || ‘;‘ || bb || ‘;‘ || cc || ‘;‘|| dd);

END LOOP;

dbms_sql.close_cursor(v_cursor); --关闭游标。

END;

输出1,1,1,1

3.建立存储过程,其中,sql为输入参数,系统引用游标为输出参数,如下:

create or replace procedure myproc

(

mysqlval in varchar2,

rescur out sys_refcursor

)

as

BEGIN

open rescur for mysqlval;

END;

4.测试存储过程

sqlplus中,执行如下:

var r refcursor;

exec proc2(‘select * from aaa‘,:r);

print r;

输出是正常的

时间: 2024-10-12 18:23:10

oracle 存储过程执行可输入sql语句并返回结果集的相关文章

ORACLE将执行过的SQL语句存放在内存的共享池

Oracle SQL性能优化深入浅出 ORACLE将执行过的SQL语句存放在内存的共享池(shared buffer pool)中,可以被所有的数据库用户共享.当你执行一个SQL语句(有时被称为一个游标)时,如果它和之前的执行过的语句完全相同,ORACLE就能很快获得已经被解析的语句以及最好的执行路径. 这个功能大大地提高了SQL的执行性能并节省了内存的使用. 为了不重复解析相同的SQL语句,在第一次解析之后,Oracle将SQL语句存放在内存中.这块位于系统全局区域SGA(systemglob

oracle 查询最近执行过的 SQL语句

oracle 查询最近执行过的 SQL语句 select sql_text,last_load_time from v$sql order by last_load_time desc; SELECT   sql_text, last_load_time FROM v$sql WHERE last_load_time IS NOT NULL and sql_text like 'select%' ORDER BY last_load_time DESC; SELECT   sql_text, l

oracle 查询最近执行过的 SQL语句(转载)

oracle 查询最近执行过的 SQL语句 (2014-06-09 18:02:43) 转载▼   分类: Database oracle 查询最近执行过的 SQL语句 select sql_text,last_load_time from v$sql order by last_load_time desc; SELECT   sql_text, last_load_time FROM v$sql WHERE last_load_time IS NOT NULL and sql_text li

执行多条SQL语句,实现数据库事务。(Oracle数据库)

/// <summary> /// 执行多条SQL语句,实现数据库事务. /// </summary> /// <param name="SQLStringList">(key为sql语句,value是该语句的OracleParameter[])</param> /// <returns></returns> public static bool ExecuteSqlTran(Dictionary<strin

SQL Server中存储过程 比 直接运行SQL语句慢的原因

问题是存储过程的Parameter sniffing 在很多的资料中都描述说SQLSERVER的存储过程较普通的SQL语句有以下优点: 1. 存储过程只在创造时进行编译即可,以后每次执行存储过程都不需再重新编译,而我们通常使用的SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度. 2. 经常会遇到复杂的业务逻辑和对数据库的操作,这个时候就会用SP来封装数据库操作.当对数据库进行复杂操作时(如对多个表进行 Update,Insert,Query,Delete时),可将此复杂操作用

利用pl/sql执行计划评估SQL语句的性能简析

一段SQL代码写好以后,可以通过查看SQL的执行计划,初步预测该SQL在运行时的性能好坏,尤其是在发现某个SQL语句的效率较差时,我们可以通过查看执行计划,分析出该SQL代码的问题所在. 那么,作为开发人员,怎么样比较简单的利用执行计划评估SQL语句的性能呢?总结如下步骤供大家参考: 1. 打开熟悉的查看工具:PL/SQL Developer. 在PL/SQL Developer中写好一段SQL代码后,按F5,PL/SQL Developer会自动打开执行计划窗口,显示该SQL的执行计划. 2.

SQL Server中存储过程比直接运行SQL语句慢的原因

原文:SQL Server中存储过程比直接运行SQL语句慢的原因 在很多的资料中都描述说SQLSERVER的存储过程较普通的SQL语句有以下优点: 1.       存储过程只在创造时进行编译即可,以后每次执行存储过程都不需再重新编译,而我们通常使用的SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度. 2.       经常会遇到复杂的业务逻辑和对数据库的操作,这个时候就会用SP来封装数据库操作.当对数据库进行复杂操作时(如对多个表进行 Update,Insert,Query

【Access2007】修改数据库密码与输入SQL语句进行查询

Access是个不入流的数据库,之所以说他不入流是因为其兼容性,大小等都未达到软件运营的要求, 但是某些项目对方要求必须以Access作为数据库,你也是不得不对此了解. Access是个完全图形化操作的数据库,程序猿出来刚到会对此很不适应. 因为你不知道怎么修改数据库密码--这还是其次,你根本找不到哪个部分给你输入SQL语句操作数据. 毕竟对于程序猿来说,能输入代码操作计算机才是最重要的. 一.修改Access2007数据库密码 左上角有打开Access数据库的按钮,就像你在word中打开.do

使用ODP.NET一次执行多句SQL语句

在实际开发的时候有的时候希望一次执行多句SQL语句,又不想使用Transcation的话,可以直接将多句SQL语句拼接起来.例如: var sql = "Begin " + "Update tabUser Set UserName = :UserName Where UserId = :UserId; " + "Update tabUser Set UserPassword = :UserPassword Where UserId = :UserId An