分享好友 数据库首页 频道列表

oracle 在一个存储过程中调用另一个返回游标的存储过程

Oracle教程  2015-09-24 11:470
第一种情况是返回的游标是某个具体的表或视图的数据,如:
SQL-Code:
复制代码 代码如下:

CREATE OR REPLACE PROCEDURE P_TESTA (
PRESULT OUT SYS_REFCURSOR
)
AS
BEGIN
OPEN PRESULT FOR SELECT * FROM USERS;
END P_TESTA;

其中USERS就是数据库中一个表。在调用的时候只要声明一个该表的ROWTYPE类型就可以了:
SQL-Code:
复制代码 代码如下:

CREATE OR REPLACE PROCEDURE P_TESTB
AS
VARCURSOR SYS_REFCURSOR;
R USERS%ROWTYPE;
BEGIN
P_TESTA(VARCURSOR);
LOOP
FETCH VARCURSOR INTO R;
EXIT WHEN VARCURSOR%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(R.NAME);
END LOOP;
END P_TESTB;

第二种情况,我们返回的不是表的所有的列,或许只是其中一列或两列,如:
SQL-Code:
复制代码 代码如下:

CREATE OR REPLACE PROCEDURE P_TESTA (
PRESULT OUT SYS_REFCURSOR
)
AS
BEGIN
OPEN PRESULT FOR SELECT ID,NAME FROM USERS;
END P_TESTA;

这里我们只返回了USERS表的ID,NAME这两个列,那么调用的时候也必须做相应的修改:
SQL-Code:
复制代码 代码如下:

CREATE OR REPLACE PROCEDURE P_TESTB
AS
VARCURSOR SYS_REFCURSOR;
CURSOR TMPCURSOR IS SELECT ID,NAME FROM USERS WHERE ROWNUM=1;
R TMPCURSOR%ROWTYPE;
BEGIN
P_TESTA(VARCURSOR);
LOOP
FETCH VARCURSOR INTO R;
EXIT WHEN VARCURSOR%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(R.ID);
END LOOP;
END P_TESTB;

与之前不同的是我们声明了一个游标类型的变量TMPCURSOR ,注意TMPCURSOR 的结构必须与存储过程P_TESTA 返回的游标结构一致,否则就会出现错误。同理只要保持两个游标类型结构一致,就可以实现自由调用。

查看更多关于【Oracle教程】的文章

展开全文
相关推荐
反对 0
举报 0
评论 0
图文资讯
热门推荐
优选好物
更多热点专题
更多推荐文章
Oracle 存储过程,临时表,动态SQL测试
--创建事务级别的结果临时表create global temporary table tmp_yshy( c1 varchar2(100), c2 varchar2(100))on commit delete rows;--创建事务级别的存储sql语句的临时表create global temporary table tmp_sql( c1 varchar2(4000))on commit delete rows;测

0评论2023-02-10508

MYSQL和ORACLE的触发器与存储过程语法差异
整改了一番脚本,遇到了一些两种数据库之间的差异,记录一下:触发器:差异MYSQLORACLE说明创建语句不同create trigger `AA` BEFORE INSERT on `BB` for each row create or replace trigger AA  before insert or update or delete on BB  for each ro

0评论2023-02-10407

MySQL存储过程实现动态执行SQL mysql 存储过程执行
--存储过程名和参数,参数中in表示传入参数,out标示传出参数,inout表示传入传出参数create procedure p_procedurecode(in sumdate varchar(10)) begin declare v_sql varchar(500);--需要执行的SQL语句 declare sym varchar(6);declare var1 varchar(20); d

0评论2023-02-10419

SQL与oracle分页存储过程 sql实现oracle分页
SQL分页存储过程///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////CREATE PROCEDURE [dbo].[sp_PageIndex]( -- Add the parameters for the stored procedure here @tblName varc

0评论2023-02-10805

sql Sever的存储过程转换为mysql的
总体来说,sql sever和Mysql的存储过程的思路都是一样的,但是在语法和结构上还是有很大的区别的。1. 在mysql中写存储过程所有的dbo都要去掉。2. 每一个sql语句后面都需要加上;否则报错;4. 再说参数,在MSSQL中我们一般会这么定义参数1234CREATE PROCEDU

0评论2023-02-10445

oracle 存储过程使用动态sql
Oracle存储过程使用动态SQL 有两种写法:用 DBMS_SQL 或 execute immediate,建议使用后者。DDL和DML (注意DDL中可以用拼接字符串的方法用来create table或drop table,在DML中,类似于insert则不可以直接用execute immediate中直接拼接的方法,必须用using

0评论2023-02-10722

oracle存储过程例子,包含函数,动态执行sql
 如下: 1 create or replace procedure JDGL_PRO_GET_DFLZJSBB3(p_date1 in varchar2, res OUT sys_refcursor) is2 3 strSql clob;4 5FUNCTION CONACT_SQL_JS(XFAJ0902 IN VARCHAR2,XFAJ0903 IN VARCHAR2) RETURN clob AS6BEGIN7 RETURN'8 SELECT9--合计省

0评论2023-02-10520

MySql带参数的存储过程编写(动态执行SQL语句)
 该存储过程是根据用户输入的条件和排序方式查询用户的信息,排序条件可以没有调用方式:call GetUsersDynamic('age=30','');/********动态查询用户的信息********/CREATE PROCEDURE GetUsersDynamic(WhereCondition varchar(500),OrderByExpress varchar(10

0评论2023-02-10997

ORACLE动态sql在存储过程中出现表或视图不存在的解决方法
Oracle动态sql在存储过程中出现表或视图不存在的解决方法  CREATE OR REPLACE PROCEDURE P_testisstrsql varchar2(2000);BEGIN     --导入用户数据数据                strsql := 'insert into tabuser (usercode) select us.tabuser.u

0评论2023-02-09933

Oracle 在函数或存储过程中执行sql查询字符串并将结果值赋值给变量 Oracle 在存储过程或函数中执行字符串sql
请看黄色部分 IF CUR_MONTH_BILL_ID0 --区县指标 THENTVALUE_SQL :='SELECT TO_CHAR(' || CUR_ROW.MAIN_FIELD || ') FROM ' || CUR_ROW.END_TABLE || '_' || CUR_MONTH || ' WHERE TO_CHAR(DISTRICT_ID)=''' || CUR_ROW.E_DISTRICT_

0评论2023-02-09800

在PL/SQL中调用Oracle存储过程 pl/sql 存储过程
存储过程 1 什么是存储过程? 用于在数据库中完成特定的操作或者任务。是一个PLSQL程序块,可以永久的保存在数据库中以供其他程序调用。2 存储过程的参数模式存储过程的参数特性: IN类型的参数 OUT类型的参数 IN-OUT类型的参数值被 传递给子程序 返回给调用

0评论2023-02-09828

MySQL数据库(六) —— SQL注入攻击、视图、事物、存储过程、流程控制
一、SQL注入攻击1、什么是SQL注入攻击importpymysqlconn = pymysql.Connect(user="root",password="admin",host="localhost",database="day43",charset="utf8")cursor = conn.cursor(pymysql.cursors.DictCursor)sql = "select *fr

0评论2023-02-09964

Oracle PL/SQL如何动态调用存储过程 收藏
今天一同事问我Oracle PL/SQL如何动态调用存储过程,我觉得应该没有问题,刚试了一下OK,主要是用execute immediate 语法,注意using里指定in和out参数,具体测试示例如下:create or replace function FNC_TEST2(iP1 INTEGER,iP2 integer) return integer is

0评论2023-02-09829

理解MySQL存储过程和函数
这篇文章主要帮助大家学习理解MySQL存储过程和函数,感兴趣的小伙伴们可以参考一下

0评论2016-05-18111

窥探mysql存储过程细节
这篇文章主要为大家详细介绍了mysql存储过程细节,对mysql存储过程感兴趣的小伙伴们可以参考一下

0评论2016-05-18120

SQL数据库存储过程示例解析
这篇文章主要针对SQL数据库存储过程示例进行解析,感兴趣的小伙伴们可以参考一下

0评论2016-04-28109

sql存储过程几个简单例子
存储过程是一组为了完成特定功能的SQL语句集,是利用SQL Server所提供的Transact-SQL语言所编写的程序。经编译后存储在数据库中。存储过程是数据库中一个重要的对象

0评论2016-03-07132

更多推荐